Quiero agregar el registro a una aplicación que estoy desarrollando, utilizando apache log4j. En este punto, quiero redireccionar todos los mensajes de registro para INFO de nivel y bajar (TRACE, DEPUR) a stdout y todos los demás mensajes de registro de WARN y superior (ERROR, FATAL) a stderr. Por ejemplo:Error de registro en stderr y depuración, información en stdout con log4j
...
logger.info("Processing at some point"); // must be written to stdout
logger.debug("Point x was processed"); // must be written to stdout
logger.warn("Incorrect point config"); // must be written only to stderr
logger.error("Exception occurred at point x"); // must be written only to stderr
Entonces, ¿qué debería presentar mi log4j.properties? Aquí cómo se ve en este momment:
log4j.rootLogger=DEBUG, stdout, stderr
# configure stdout
# set the conversion pattern of stdout
# Print the date in ISO 8601 format
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Threshold = DEBUG
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %-5p %d [%t][%F:%L] : %m%n
# configure stderr
# set the conversion pattern of stdout
# Print the date in ISO 8601 format
log4j.appender.stderr = org.apache.log4j.ConsoleAppender
log4j.appender.stderr.Threshold = WARN
log4j.appender.stderr.Target = System.err
log4j.appender.stderr.layout = org.apache.log4j.PatternLayout
log4j.appender.stderr.layout.ConversionPattern = %-5p %d [%t][%F:%L] : %m%n
El problema con la configuración anterior es que el logger.error() ... se imprime en la salida estándar también.
Gracias por su rápida respuesta. ¿Hay alguna forma de subclase del appender (por ejemplo, stdout appender) para que cuando se rechace un registro por encima de INFO? ¿Qué pasa con los filtros: configurar un filtro para stdout para aceptar solo registros de TRACE, DEBUG, INFO? – Elvis
Absolutamente. Puede crear su propio appender y señalarlo en el archivo de configuración. –
Aquí hay un ejemplo de (en xml config) http://stackoverflow.com/questions/4825072/how-to-set-filter-in-the-log4j-xml así que esto es lo mismo que: log4j.appender.stdout. Filter = org.apache.varia.LevelRangeFilter log4j.appender.stdout.Filter.LevelMax = INFO log4j.appender.stdout.Filter.LevelMin = TRACE? Si es así, parece que no funciona en mi caso. Log4j lanza un mensaje de advertencia que indica que el filtro no se puede configurar ... – Elvis