2016-06-22 35 views
6

Próbuję zalogować się z Jersey 2.23. Od tej wersji klasa LoggingFilter jest przestarzała, jak można przeczytać na przykład tutaj: https://jersey.java.net/documentation/latest/logging_chapter.html. Więc muszę użyć zamiast tego LoggingFeature. Co to było nie to metoda register z dnia ResourceConfig, jak wyjaśniono w tej dokumentacji. Ale na koniec metoda property zadziałała:Poziom logowania w koszulkach nowy LoggingFeature

client.property(LoggingFeature.LOGGING_FEATURE_LOGGER_LEVEL_SERVER, "WARN"); 

Powoduje wydrukowanie wszystkich wiadomości jako ostrzeżenia. Niestety jest to udokumentowane nigdzie (przynajmniej nie mogłem znaleźć niczego), które wartości są dozwolone. Oczywiście musi to być String, ponieważ otrzymuję komunikat logu, że nie ma możliwości przekształcenia wartości w String, gdy próbuję czegoś innego niż String. Teraz chcę zapisać te komunikaty za pomocą poziomu TRACE i nie mogę znaleźć odpowiedniego łańcucha, aby to osiągnąć. "TRACE" i "FINE" nie działały na przykład, w takich przypadkach nic nie jest rejestrowane. Muszę wspomnieć, że używam Log4j2 razem z Slf4jBridgeHandler, ponieważ Jersey używa JUL.

Odpowiedz

8

Sam walczyłem z tym przez kilka godzin, zanim w końcu odkryłem dzisiaj "tajemnicę".

Jest to nieco sprzeczne z intuicją, ale poziom ustawiony przy pomocy LOGGING_FEATURE_LOGGER_LEVEL_SERVER jest w rzeczywistości minimalnym poziomem, na jaki musi być ustawiony rejestrator serwera, aby wydrukować dzienniki. Na podstawie nazwy założyłem, że to ustawienie rzeczywistego poziomu rejestratora - co oznacza, że ​​ustawienie go na FINER lub FINEST spowoduje zwiększenie wydajności. Zamiast tego jest to po prostu "wyłączanie" rejestrowania, chyba że określony poziom jest spełniony.

Jako przykład, jeśli ustawisz go na WARNING, zobaczysz logi tak długo, jak długo serwer/klient jest ustawiony na drukowanie co najmniej na poziomie WARNING. Poziomy zdefiniowane przez java.util.logging są:

ciężkimi (najwyższa wartość)
UWAGA
INFORMACJE
KONFIGURACJA
FINE
FINER
PRAWDZIWE (najniższą wartość)

Więc ustawiając go na WARNING (literał WARN nie działa dla mnie w 2.23.1) zobaczysz lo gs, ponieważ rejestrowanie jest domyślnie na poziomie INFO.

Alternatywnym rozwiązaniem jest zmiana domyślnego poziomu rejestrowania w pliku logging.properties, który zwykle ma postać $JAVA_HOME/jre/lib/logging.properties. Można na przykład wprowadzić następujące zmiany w pliku i nie będzie już trzeba ustawić jakieś specjalne właściwości w kodzie:

java.util.logging.ConsoleHandler.level = FINEST 
org.glassfish.jersey.test.JerseyTest.level = FINEST 

Oczywistą wadą jest to, że będzie to wskóra uruchamiane z tego JDK/JRE. Istnieją sposoby na zastąpienie tej standardowej lokalizacji i użycie alternatywnego pliku logging.properties, ale to zależy od tego, jak wykonujesz kod, więc pozwolę ci to zbadać w oparciu o twoje okoliczności.

Przykładem może być ten wątek, który wyjaśnia, jak to zrobić przy użyciu Maven: Logging level under maven surefire

+0

Wow że ma intuicyjny w ogóle - dzięki! – Mafro34

+0

Wow, to mnie potknęło ..Nie przyznam się, jak długo. Domyślne INFO jdk ukrywało wszystko. I jak wspomniałeś, całkowicie sprzeczne z intuicją ustawienie poziomu Jersey_SERVER na WARN lub SEVERE – ChrisO