2012-10-12 3 views
19

pardon se la domanda è troppo banale. Sono completamente nuovo a log4j. Ho visto che ci sono due tag e tag, che si riferiscono a vari appendici. Dire che voglio registrare le informazioni nella mia base di codice in un file, inviarlo alla mia email e stamparlo alla console. Voglio il livello impostato per informazioni. Non è sufficiente avere un singolo tag che abbia riferimenti ai tre appendici? (File, email e console) perché ne abbiamo bisogno di un altro per lo stesso?perché abbiamo bisogno di root e logger in log4j.xml

+0

Voglio dire, non è sufficiente avere un singolo tag radice? che ha tre riferimenti agli appendici? – parameswar

risposta

30

È sufficiente.

In log4j un logger è associato a un pacchetto oa volte con una classe particolare. Il pacchetto/classe di un logger è definito dall'attributo "nome". Un logger registra i messaggi nel suo pacchetto e anche in tutti i pacchetti figlio e le loro classi. L'unica eccezione è il logger root che registra i messaggi per tutte le classi nell'applicazione.

Un logger ha anche un livello e può avere uno o più appendici (destinazioni di registrazione) collegati ad esso.

Nel prossimo esempio abbiamo due taglialegna:

  • il logger principale che registra i messaggi con livello INFO o superiore in tutti i pacchetti per le diverse mete: console, e-mail e file,
  • "com.foo" logger che registra i messaggi con livello WARN o superiore nel pacchetto "com.foo" e i relativi pacchetti figlio in un altro file.

    <log4j:configuration> 
        <!-- Declaration of appenders FILE, MAIL, CONSOLE and ANOTHERFILE --> 
        ... 
        <!-- --> 
    
        <logger name="com.foo"> 
         <level value="warn"/> 
         <appender-ref ref="ANOTHERFILE" /> 
        </logger> 
        <root> 
         <priority value ="info" /> 
         <appender-ref ref="FILE" /> 
         <appender-ref ref="MAIL" /> 
         <appender-ref ref="CONSOLE" /> 
        </root> 
    </log4j:configuration> 
    

Si dovrebbe read more circa i principi fondamentali log4j.

+0

Il logger di root registra anche i messaggi delle classi "com.foo"? –

+0

@ mmc18 Sì, sicuramente. Tutti i messaggi scritti sull'appender ANOTHERFILE sono stati scritti anche negli appendici del root logger. –

+1

Solo una nota aggiuntiva, è possibile impedire che i messaggi inviati ad ANOTHERFILE vengano inviati al registratore principale impostando la proprietà di additività del registratore su false. Pensa ad esso come un'eccezione, che sale da un livello inferiore a quello superiore (radice). l'addivity è il "catch" senza un "throw" – JReader