Qual è il significato della proprietà log4j.rootLogger nel file log4j.properties? Cosa succede se non utilizzo questa proprietà?


85

Qual è il significato della log4j.rootLoggerproprietà nel log4j.propertiesfile? Cosa succede se non utilizzo questa proprietà?

Esempio :

# 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

Cosa succede se imposto questa proprietà su ERRORmode.

Risposte:


95

Samudra Gupta spiega nel suo libro 1 :

L' Loggeroggetto è l'oggetto principale che uno sviluppatore di applicazioni utilizza per registrare qualsiasi messaggio. Gli Loggeroggetti che agiscono all'interno di una particolare istanza di un'applicazione seguono una gerarchia padre-figlio .

Se hai la seguente configurazione:

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

Ecco come potrebbe apparire la gerarchia del logger: 2

Albero

Samudra Gupta continua a spiegare:

In cima alla gerarchia esiste un logger di root. Il logger root esiste al di fuori dell'ambito di qualsiasi gerarchia di logger personalizzato che possiamo creare. Esiste sempre come root logger per tutte le possibili gerarchie di logger e non ha spazio dei nomi. Tutti gli altri Loggeroggetti specifici dell'applicazione sono oggetti figlio per il logger principale. La relazione genitore-figlio dei logger indica la dipendenza dei logger che agiscono all'interno della stessa applicazione. Un logger figlio può ereditare le proprietà dal logger genitore in modo ricorsivo verso l'alto nell'albero. In genere, un logger figlio erediterà le seguenti proprietà dai logger principali:

  • Level: Se il logger secondario non ha un livello albero esplicito specificato, utilizzerà il livello del suo genitore più vicino o il primo livello appropriato che trova ricorsivamente in alto nella gerarchia.
  • Appender: Se non è presente alcun appender collegato a un logger, il logger secondario utilizza l'appender del logger principale più vicino o il primo appender che trova ricorsivamente in alto nell'albero.
  • ResourceBundle: ResourceBundlessono file delle proprietà del pattern chiave-valore utilizzati per la localizzazione dei messaggi di registrazione. Un logger figlio eredita qualsiasi logger ResourceBundleassociato al suo logger padre.

APPUNTI

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

2 Dominic Mitchell, Logging in Java , http://happygiraffe.net/blog/2008/09/03/logging-in-java/ , Estratto il 26 maggio 2014.


1
+1 per "Esiste sempre come root logger per tutte le possibili gerarchie di logger e non ha spazio dei nomi."
Azim

2
Qual è la risposta a questa domanda di OP - " Cosa succede se non utilizzo questa proprietà? " ??
Hagrawal,

4
Accidenti ... guarda lo sfondo sul link alla pagina di Dominic. Assolutamente illeggibile.
MasterJoe

@ testerjoe2 - hai ragione, anche se è una bella immagine che rende difficile la lettura - come ai vecchi tempi html in cui le persone avevano uno sfondo giallo con testo bianco - ti fa venire voglia di sanguinare gli occhi!
JGlass

12

Rispondere

Cosa succede se non utilizzo questa proprietà?

Se non imposti rootLogger su un livello e un appender, riceverai un avviso.

Ad esempio, se si omette o si commenta la riga log4j.rootLogger=DEBUG, stdout, ovvero si dice che il file log4j.properties contiene solo il rootlogger e nessun logger aggiuntivo, qui il logger di root viene commentato:

#log4j.rootLogger=DEBUG, stdout

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

Otterrai qualcosa di simile al seguente output:

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.

7

La proprietà log4j.rootLogger imposta il livello (DEBUG qui) e l'Appender (A1 qui) per root Logger. Questo non è obbligatorio. Il logger radice non ha un appender predefinito collegato e può esistere senza un appender. Quindi, il file delle proprietà log4j può essere senza che questa proprietà sia impostata.

Il logger root è il logger più alto nella gerarchia log4j simile alla classe Object in Java.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.