2013-07-02 11 views
22

voglio fare due cose:log4j2 - Registra su file e console (con diversi livelli)

  1. Log per console con un certo livello di log
  2. Registra su file con un altro livello di log

La registrazione della console sembra funzionare correttamente ma il file di registro continua a essere vuoto.

Questo è il mio log4j2.xml

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="WARN"> 
    <appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 

    <File name="MyFile" fileName="logs/app.log" immediateFlush="true"> 
     <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </File> 

    </appenders> 
    <loggers> 

    <logger name="filelogger" level="error"> 
     <appender-ref ref="MyFile"/> 
    </logger> 

    <root level="info"> 
     <appender-ref ref="Console"/> 
    </root> 
    </loggers> 
</configuration> 

Che cosa potrebbe essere sbagliato?

risposta

39

ho capito! Il tag <Logger> non deve essere usato in questo caso, vedere la risposta di Gaurang Patel per i dettagli.

<?xml version="1.0" encoding="UTF-8"?> 
<configuration status="WARN"> 
    <appenders> 
    <Console name="Console" target="SYSTEM_OUT"> 
     <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </Console> 

    <File name="MyFile" fileName="logs/app.log"> 
     <PatternLayout pattern="%d{yyyy-mm-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> 
    </File>    
    </appenders> 

    <loggers>  
    <root level="debug"> 
     <appender-ref ref="Console" level="info"/> 
     <appender-ref ref="MyFile" level="error"/> 
    </root>  
    </loggers> 
</configuration> 
+5

quindi qual è stato il problema? pubblicare una soluzione senza una spiegazione non aiuta –

+2

Ho aggiunto la spiegazione nella risposta inviata da me .. –

5

<logger name="filelogger" level="error" >
Questo dovrebbe essere il problema. Il nome del logger di solito è il nome del pacchetto (a meno che non lo si chiami in modo specifico filelogger).
Prova <logger name="com.yourpackage" level="error" additivity="true">

consultare Log4j2 Doc

+0

Grazie. Ha funzionato per la registrazione dei file, ma ora l'output della console è scomparso. C'è qualcosa di sbagliato anche lì? – daker

+0

Modificata la mia risposta aggiunta 'additivity = "true" ' – basiljames

+0

l'additività è vera per impostazione predefinita in log4j2 –

11

Anche se Daker ha inserito il file di configurazione corretto ma non lo ha spiegato. Vorrei aggiungere una spiegazione qui. Come citato nella documentazione di Log4j2 here, l'utilizzo del tag > del logger > non era richiesto per il requisito specificato. Inoltre quando si dovrebbe usare il tag <Logger>? Leggi la spiegazione sotto la documentazione,

Forse si desidera eliminare tutta l'uscita TRACE da tutto tranne com.foo.Bar. Semplicemente cambiando il livello di registro non compire l'operazione. Invece, la soluzione è quella di aggiungere una nuova definizione logger alla configurazione:

<Loggers> 
    <Logger name="com.foo.Bar" level="TRACE"/> 
    <Root level="ERROR"> 
    <AppenderRef ref="STDOUT"> 
    </Root> 
    ... 
</Loggers>