Wat is de betekenis van de eigenschap log4j.rootLogger in het bestand log4j.properties? Wat gebeurt er als ik deze eigenschap niet gebruik?

Wat is de betekenis van de eigenschap log4j.rootLoggerin het bestand log4j.properties? Wat gebeurt er als ik deze eigenschap niet gebruik?

Voorbeeld:

# 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

Wat gebeurt er als ik deze eigenschap in de modus ERRORzet.


Antwoord 1, autoriteit 100%

Samudra Gupta legt in zijn boek1uit:

Het Logger-object is het hoofdobject dat een applicatieontwikkelaar gebruikt om een ​​bericht te loggen. De Logger-objecten die binnen een bepaalde instantie van een toepassing werken, volgen een ouder-kind-hiërarchie.

Als u de volgende configuratie heeft:

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

Zo zou de loggerhiërarchie eruit kunnen zien:2

Boom

Samudra Gupta blijft uitleggen:

Bovenaan de hiërarchie staat een rootlogger. De rootlogger bestaat buiten het bereik van elke aangepaste loggerhiërarchie die we kunnen bedenken. Het bestaat altijd als de rootlogger voor alle mogelijke loggerhiërarchieën en heeft geen naamruimte. Alle andere toepassingsspecifieke Logger-objecten zijn onderliggende objecten voor de rootlogger. De ouder-kindrelatie van loggers betekent de afhankelijkheid van de loggers die binnen dezelfde applicatie werken. Een onderliggende logger kan recursief eigenschappen van de bovenliggende logger in de boom erven. Gewoonlijk zal een onderliggende logger de volgende eigenschappen erven van zijn bovenliggende logger(s):

  • Level: als de onderliggende logger geen expliciet boomniveau heeft opgegeven, gebruikt het het niveau van zijn naaste ouder of het eerste juiste niveau dat recursief hoger in de hiërarchie wordt gevonden.
  • Appender: als er geen appender aan een logger is gekoppeld, gebruikt de onderliggende logger de appender van de dichtstbijzijnde bovenliggende logger of de eerste appender die recursief in de boom wordt gevonden.
  • ResourceBundle: ResourceBundleszijn bestanden met sleutelwaardepatrooneigenschappen die worden gebruikt voor de lokalisatie van logberichten. Een onderliggende logger erft elke ResourceBundledie is gekoppeld aan de bovenliggende logger.

OPMERKINGEN

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

2Dominic Mitchell, Inloggen op Java, http://happygiraffe.net/blog/2008/09/03/logging-in-java/, Ontvangen op 26 mei 2014.


Antwoord 2, autoriteit 12%

Om te antwoorden

Wat gebeurt er als ik deze eigenschap niet gebruik?

Als u de rootLogger niet instelt op een niveau en een appender, krijgt u een waarschuwing.

Als u bijvoorbeeld de regel log4j.rootLogger=DEBUG, stdoutweglaat of er commentaar op geeft, dwz dat uw log4j.properties-bestand alleen de rootlogger en geen extra loggers bevat, wordt hier de rootlogger heeft gereageerd:

#log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

Je krijgt zoiets als de volgende uitvoer:

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.

Antwoord 3, autoriteit 7%

log4j.rootLoggereigenschap stelt het niveau (DEBUG hier) en Appender (A1 hier) voor root Logger in. Dit is niet verplicht. Root logger heeft geen standaard appendage en kan zonder appendage bestaan. Uw log4j-eigenschappenbestand kan dus zijn zonder dat deze eigenschap is ingesteld.

Rootlogger is de hoogste logger in de log4j-hiërarchie, vergelijkbaar met de Object-klasse in Java.

Other episodes