Non ho mai avuto bisogno di farlo, ma dato che ho letto una volta Log4J - Il manuale completo, spero che questi suggerimenti aiuteranno.
- Scrivi la tua filtro personalizzato estendendo org.apache.log4j.spi.Filter
- Override decide method
- Usa loggingEvent.getLevel(), per identificare il livello di registro che è stato attivato.
Scrivi seguente logica nel decidere
if(event.getLevel() == Level.INFO || event.getLevel() == Level.FATAL)
return ACCEPT;
return DENY;
Questo filtro accetterà tutti i registri che sono o INFO o fatali. Potresti diventare più creativo.
Si prega di notare che non ho testato questo codice. Questa è solo una linea guida, spero che questo aiuta
Edit: su una ricerca po ', ho trovato qualcosa che potrebbe essere più facile. Credo che, è possibile utilizzare LevelMatchFilter, in questo modo
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="info" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="fatal" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter"/>
riferiscono: http://wiki.apache.org/logging-log4j/Log4jXmlFormat per configurarion XML. C'è una sezione sul Filter Configuration
Non so cosa si ferma OP ad accettare questa risposta. Ho appena testato, funziona:
Ecco l'XML.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="util" class="org.apache.log4j.FileAppender">
<param name="File" value="D:/util.log" />
<param name="Append" value="true" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%t %-5p %c{2} - %m%n"/>
</layout>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="info" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.LevelMatchFilter">
<param name="LevelToMatch" value="fatal" />
<param name="AcceptOnMatch" value="true" />
</filter>
<filter class="org.apache.log4j.varia.DenyAllFilter"/>
</appender>
<root>
<priority value ="debug" />
<appender-ref ref="util" />
</root>
</log4j:configuration>
Ecco il codice Java
DOMConfigurator.configure("log4j.xml");
Logger log = Logger.getLogger(Test.class);
log.debug("DEBUG");
log.info("INFO");
log.warn("WARN");
log.error("ERROR");
log.fatal("FATAL");
Ecco l'output in (come configurato) D:/util.log
main INFO test.Test - INFO
main FATAL test.Test - FATAL
Perché non si utilizza WARN e fatale o WARN ed ERRORE? Questo è in genere ciò che la maggior parte dei progetti che ho visto fare, e non devi cambiare il modo in cui funziona log4j e potenzialmente confondere le nuove persone che aderiscono al progetto. – jmort253
No. Sto registrando tutti i livelli di messaggi. Ma nelle esecuzioni normali ho solo bisogno di registrare INFO e FATAL. Ci sarà l'occasione ho bisogno di eseguire il debug dell'applicazione. A quel tempo registrerò tutti i messaggi di 5 livelli. Spero di farlo cambiando il file di configurazione esterno (non quello usato per log4j) che cambia il livello di priorità del logger che sto usando. – nath
Compiti ovunque? – gabuzo