Was bedeutet Schwellenwert in Log4J?

80

Ich habe log4jEigenschaften wie unten. Alles, was angemeldet TextProcessor.logist, liegt über der WARN-Ebene. Ich verstehe den hier zum Debuggen festgelegten Schwellenwert nicht. Kann jemand erklären, was die Schwelle bewirkt?

log4j.logger.TextProcessor=warn,TextProcessor 

log4j.appender.TextProcessor=org.apache.log4j.RollingFileAppender
log4j.appender.TextProcessor.File=C:/project/logs/TextProcessor.log
log4j.appender.TextProcessor.MaxFileSize=10MB
log4j.appender.TextProcessor.MaxBackupIndex=10
log4j.appender.TextProcessor.Threshold=debug
log4j.appender.TextProcessor.layout=org.apache.log4j.PatternLayout
log4j.appender.TextProcessor.layout.ConversionPattern=[%d] [%5p] (%F:%L) - %m%n
javanerd
quelle
1
Siehe auch Produktionseinstellungen für log4j zum Einfluss von Pegeln und Schwellenwerten auf die Sperrung und Leistung von log4j.
Vadzim

Antworten:

123

Sie haben hier zwei Dinge: einen Logger und einen Appender. Leider haben Sie für beide den gleichen Namen gewählt, was nicht sehr deutlich macht.

Die Mindeststufe des Loggers ist auf Warnung eingestellt. Dies bedeutet, dass alles, was Sie mit diesem Logger protokollieren, der nicht mindestens die Warnstufe hat, ignoriert wird.

Sobald eine Nachricht vom Logger akzeptiert wurde, wird sie an einen oder mehrere Appender gesendet (an eine Datei, an die Konsole, an einen Mailserver usw.). Jeder dieser Appender kann einen Schwellenwert definieren. Sie können beispielsweise die Nachrichten in der Konsole auf Fehler beschränken, aber Warnmeldungen in der Protokolldatei akzeptieren.

JB Nizet
quelle
Für mich passt 'Schwelle' nicht wirklich. Ich habe log4j mithilfe der XML-Konfiguration gestartet und in den Appendern heißt es 'level' mit der Bedeutung des Schwellenwerts. Ich denke, dass dasselbe Konzept (Begrenzung des Protokollschweregrads) mit zwei verschiedenen Bezeichnungen (Bezeichnung, Schwellenwert) das Verständnis erschwert (wenn ich es bisher wirklich richtig verstanden habe). Aber ich bin sowieso kein englischer Muttersprachler.
Dirk Schumacher
33

Der Schwellenwert ist der zweite Filter für zu protokollierende Nachrichten

z.B:

 log4j.logger.TextProcessor=Debug,TextProcessor , InfoLogger
 .
 .
 .
 log4j.appender.TextProcessor.Threshold=Error

Wenn Logger auf Stufe DEBUG und Appender-Schwellenwert auf Fehler eingestellt ist, werden mit dem Appender TextProcessor nur Fehler- und Nachrichten mit höherem Schweregrad protokolliert.

Mit dem Schwellenwert können Sie verschiedene Appender mit unterschiedlichen Schwellenwerten definieren. In dem oben genannten Beispiel können Sie beispielsweise auch InfoLogger mit aktivierter Nachrichtenprotokollierung auf Info-Ebene aktivieren

 log4j.logger.TextProcessor=Debug,TextProcessor , InfoLogger
 .
 .
 .
 log4j.appender.InfoLogger.Threshold=INFO

Um die Ebenen zu verstehen, gibt es in log4j folgende Protokollierungsebenen :

FATAL: shows messages at a FATAL level only  
ERROR: Shows messages classified as ERROR and FATAL  
WARNING: Shows messages classified as WARNING, ERROR, and FATAL  
INFO: Shows messages classified as INFO, WARNING, ERROR, and FATAL  
DEBUG: Shows messages classified as DEBUG, INFO, WARNING, ERROR, and FATAL  
TRACE : Shows messages classified as TRACE,DEBUG, INFO, WARNING, ERROR, and FATAL
ALL : Shows messages classified as TRACE,DEBUG, INFO, WARNING, ERROR, and FATAL 
OFF : No log messages display

Gehe zu URL für weitere Details

Shirishkumar Bari
quelle
25

Die Protokollierungsebene sind TRACE, DEBUG, INFO, WARN, ERRORund FATAL. Je nach Schweregrad können Sie auswählen, was auf welcher Ebene im Code protokolliert werden soll. Sie haben beispielsweise die Möglichkeit, den Ein- und Ausgang von Methoden zu protokollieren, können sich jedoch dafür entscheiden, auf der DEBUGEbene zu protokollieren . Auf diese Weise können Sie den Code debuggen, da er standardmäßig auf der Konsole gedruckt wird (der Standard-Konsolen-Appender ist aktiviert). Während Sie zur Produktion gehen, können Sie den Schwellenwert erhöhen ERRORund verhindern, dass die Anwendung nicht so nützliche Details auf der Konsole oder in Protokolldateien druckt.

Vinod R.
quelle
13

Geben Sie eine einfache Zuordnung von der Eigenschaftenkonfigurationsdatei zum Ablauf von Protokollnachrichten. (Ich habe einige Konfigurationszeilen versteckt, um sie zu minimieren)

log4j.rootLogger=ALL, stdout
log4j.logger.com.xyz=INFO, file

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold=DEBUG
...

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.Threshold=WARN
...

Schema der Protokollierung aus den obigen Einstellungen

Um zu verstehen, was es ist, sollten Sie Folgendes wissen:

  • Die Protokollierungsstufen erhöhen sich beim Abrufen ganz links: TRACE, DEBUG, INFO, WARN, ERROR und FATAL
  • Protokollierung auf Mindestniveau, die der Logger von der Anwendung akzeptiert.
  • Protokollierung der Mindeststufe am Appender, die entscheidet, was geschrieben wird

** Vererbung und Additivität sind etwas komplexer, aber Sie sollten zuerst mit grundlegenden und einfachen Dingen beginnen.

Ken Block
quelle