Welche Bedeutung hat die Eigenschaft log4j.rootLogger in der Datei log4j.properties? Was passiert, wenn ich diese Eigenschaft nicht benutze?

84

Welche Bedeutung hat das log4j.rootLoggerEigentum in der log4j.propertiesDatei? Was passiert, wenn ich diese Eigenschaft nicht verwende?

Beispiel :

# Set root logger level to DEBUG and its only appender to A1.
log4j.rootLogger=DEBUG, A1

# A1 is set to be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender

Was passiert, wenn ich diese Eigenschaft auf ERRORModus setze?

Jitendra
quelle

Antworten:

92

Samudra Gupta erklärt in seinem Buch 1 :

Das LoggerObjekt ist das Hauptobjekt, mit dem ein Anwendungsentwickler eine Nachricht protokolliert. Die LoggerObjekte, die in einer bestimmten Instanz einer Anwendung agieren, folgen einer Eltern-Kind-Hierarchie .

Wenn Sie die folgende Konfiguration haben:

log4j.rootLogger=WARN, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.logger.com.me.proj2=INFO

So könnte die Logger-Hierarchie aussehen: 2

Baum

Samudra Gupta erklärt weiter:

An der Spitze der Hierarchie befindet sich ein Root-Logger. Der Root-Logger existiert außerhalb des Bereichs einer benutzerdefinierten Logger-Hierarchie, die wir möglicherweise entwickeln. Es existiert immer als Root-Logger für alle möglichen Logger-Hierarchien und hat keinen Namespace. Alle anderen anwendungsspezifischen LoggerObjekte sind untergeordnete Objekte für den Root-Logger. Die Eltern-Kind-Beziehung von Protokollierern gibt die Abhängigkeit der Protokollierer an, die in derselben Anwendung agieren. Ein untergeordneter Logger kann Eigenschaften rekursiv im Baum von seinem übergeordneten Logger erben. In der Regel erbt ein untergeordneter Logger die folgenden Eigenschaften von seinen übergeordneten Loggern:

  • Level: Wenn für den untergeordneten Logger keine explizite Baumebene angegeben ist, verwendet er die Ebene seines nächsten übergeordneten Elements oder die erste richtige Ebene, die er rekursiv in der Hierarchie findet.
  • Appender: Wenn an einen Logger kein Appender angehängt ist, verwendet der untergeordnete Logger den Appender seines nächsten übergeordneten Loggers oder den ersten Appender, den er rekursiv im Baum findet.
  • ResourceBundle: ResourceBundlessind Schlüsselwertmuster-Eigenschaftendateien, die für die Lokalisierung von Protokollierungsnachrichten verwendet werden. Ein untergeordneter Logger erbt alle ResourceBundlemit seinem übergeordneten Logger verknüpften Logger.

ANMERKUNGEN

1 Samudra Gupta, Pro Apache Log4j, Zweite Ausgabe (Berkeley, CA: Apress, 2005), 24-25, ISBN13: 978-1-59059-499-5

2 Dominic Mitchell, Anmelden in Java , http://happygiraffe.net/blog/2008/09/03/logging-in-java/ , Abgerufen am 26. Mai 2014.

Paul Vargas
quelle
1
+1 für "Es existiert immer als Root-Logger für alle möglichen Logger-Hierarchien und hat keinen Namespace."
Azim
2
Was ist die Antwort auf diese Frage von OP - " Was passiert, wenn ich diese Eigenschaft nicht benutze? " ??
Hagrawal
4
Meine Güte ... sieh dir den Hintergrund auf dem Link zu Dominics Seite an. Absolut unlesbar.
MasterJoe
@ testerjoe2 - Sie haben Recht, obwohl es ein hübsches Bild ist, das es schwer zu lesen macht - wie in den alten HTML-Tagen, in denen Menschen einen gelben Hintergrund mit weißem Text hatten -, lassen Ihre Augen bluten!
JGlass
10

Antworten

Was passiert, wenn ich diese Eigenschaft nicht verwende?

Wenn Sie den rootLogger nicht auf eine Ebene und einen Appender setzen, erhalten Sie eine Warnung.

Wenn Sie beispielsweise die Zeile weglassen oder log4j.rootLogger=DEBUG, stdoutauskommentieren, dh wenn Ihre Datei log4j.properties nur den Rootlogger und keine zusätzlichen Logger enthält, wird hier der Root-Logger auskommentiert:

#log4j.rootLogger=DEBUG, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

Sie erhalten so etwas wie die folgende Ausgabe:

log4j:WARN No appenders could be found for logger (log4jtests.Log4jHelloWorld).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

quelle
5

Die Eigenschaft log4j.rootLogger legt die Ebene (DEBUG hier) und den Appender (A1 hier) für den Root-Logger fest. Dies ist nicht zwingend erforderlich. Dem Root-Logger ist kein Standard-Appender zugeordnet, und er kann ohne Appender existieren. Ihre log4j-Eigenschaftendatei kann also ohne diese Eigenschaft festgelegt werden.

Der Root-Logger ist der höchste Logger in der log4j-Hierarchie, ähnlich der Object-Klasse in Java.

Abhishek Jotshi
quelle