2016-06-22 10 views
6

Ich versuche, mit Jersey 2.23 zu loggen. Seit dieser Version ist die Klasse LoggingFilter veraltet, wie man zB hier lesen kann: https://jersey.java.net/documentation/latest/logging_chapter.html. Also muss ich stattdessen LoggingFeature verwenden. Was war nicht Arbeit war die register Methode von ResourceConfig, wie es in dieser Dokumentation erklärt wird. Aber am Ende der property Methode gearbeitet:Loglevel in Trikots new LoggingFeature

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

Dies druckt jede Nachricht als Warnung. Leider ist nirgendwo dokumentiert (zumindest konnte ich nichts finden) welche Werte erlaubt sind. Offensichtlich muss es eine Zeichenkette sein, weil ich eine Protokollnachricht erhalte, dass es keine Möglichkeit gibt, den Wert in eine Zeichenkette umzuwandeln, wenn ich irgendetwas anderes als eine Zeichenkette versuche. Jetzt möchte ich diese Nachrichten mit Level TRACE protokollieren und ich kann keinen passenden String finden, um dies zu erreichen. "TRACE" und "FINE" haben beispielsweise nicht funktioniert, in diesen Fällen wird nichts protokolliert. Ich muss erwähnen, dass ich Log4j2 zusammen mit dem Slf4jBridgeHandler verwende, weil Jersey JUL verwendet.

Antwort

8

Ich kämpfte einige Stunden damit, bis ich das "Mysterium" entdeckte.

Es ist etwas kontraintuitiv, aber die Ebene, die Sie mit der LOGGING_FEATURE_LOGGER_LEVEL_SERVER einstellen, ist tatsächlich die minimale Ebene, die der Server Logger eingestellt werden muss, um Ihre Protokolle zu drucken. Ich hatte, basierend auf dem Namen, angenommen, dass dies den tatsächlichen Logger-Level einstellt - was bedeutet, dass die Einstellung auf FINER oder FINEST mehr Output produzieren würde. Stattdessen wird die Protokollierung einfach deaktiviert, es sei denn, ein bestimmtes Level ist erfüllt.

Als Beispiel, wenn Sie es auf WARNING setzen, dann werden Sie die Protokolle sehen, solange der Server/Client festgelegt ist, um mindestens WARNING Ebene zu drucken. Die Ebenen, wie definiert durch java.util.logging sind:

SCHWEREN (höchster Wert)
WARNING
INFO
CONFIG
FINE
FINER
FINEST (niedrigster Wert)

Also, indem Sie es auf WARNING setzen (das Literal WARN funktioniert nicht für mich in 2.23.1), werden Sie das lo sehen gs, da die Protokollierung standardmäßig INFO ist.

Eine alternative Lösung besteht darin, die Standardprotokollierungsstufe in Ihrer logging.properties-Datei zu ändern, die sich normalerweise in $JAVA_HOME/jre/lib/logging.properties befindet. Sie könnten zum Beispiel die folgenden Änderungen an der Datei und Sie müssten nicht mehr alle speziellen Eigenschaften im Code setzen:

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

Der offensichtliche Nachteil dabei ist, dass es etwas bewirken werden Sie von diesem Lauf JDK/JRE. Es gibt Möglichkeiten, wie Sie diesen Standardstandort überschreiben und eine alternative logging.properties-Datei verwenden können, aber es hängt davon ab, wie Sie Ihren Code ausführen, damit ich Sie basierend auf Ihren Umständen untersuchen kann.

Ein Beispiel wäre dieser Thread sein, die erklären, wie es zu tun, wenn Maven: Logging level under maven surefire

+0

Wow, das ist nicht überhaupt intuitiv - danke! – Mafro34

+0

Wow, das hat mich zum Stolpern gebracht ..Ich werde nicht zugeben, wie lange. Die voreingestellte jdk INFO versteckte alles. Und wie Sie bereits erwähnt haben, ist es absolut kontraintuitiv, den Jersey _SERVER Level auf WARN oder SEVERE zu setzen – ChrisO