Nunca fui necesario para hacer esto, pero desde que una vez leí Log4J - El manual completo, espero que estos indicadores ayuden.
- Escribe tu propia filtro personalizado mediante la extensión de org.apache.log4j.spi.Filter
- Anulación decide method
- Uso loggingEvent.getLevel(), para identificar el nivel de registro que se desencadenó.
Escribir siguiente lógica en decidir
if(event.getLevel() == Level.INFO || event.getLevel() == Level.FATAL)
return ACCEPT;
return DENY;
Este filtro aceptará todos los registros que son o INFO o fatal. Puede ser más creativo.
Tenga en cuenta que no he probado este código. Esta es sólo una guía, espero que esta ayuda
Edición: en una búsqueda poco, encontré algo que podría ser más fácil. Supongo, puede utilizar LevelMatchFilter, de esta manera
<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"/>
se refieren: http://wiki.apache.org/logging-log4j/Log4jXmlFormat para configurarion XML. Hay una sección sobre Filter Configuration
No sé lo que deja de OP en la aceptación de esta respuesta. Acabo de probar, funciona:
Aquí está el 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>
Aquí está el código de 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");
Aquí está la salida de (según la configuración) D:/util.log
main INFO test.Test - INFO
main FATAL test.Test - FATAL
¿Por qué no utilizar WARN y fatal o ADVERTENCIA y ERROR? Eso es típicamente lo que hacen la mayoría de los proyectos que he visto, y no tiene que cambiar la forma en que funciona log4j y potencialmente confundir a las personas nuevas que se unen al proyecto. – jmort253
No. Estoy registrando todos los niveles de mensajes. Pero en las ejecuciones normales solo necesito registrar INFO y FATAL. Habrá ocasiones en que necesito depurar la aplicación. En ese momento voy a registrar los 5 mensajes de nivel. Espero hacerlo cambiando el archivo de configuración externo (no el utilizado para log4j) que cambia el nivel de prioridad del registrador que estoy usando. – nath
¿Tarea en cualquier lugar? – gabuzo