¿Cómo inicializar log4j correctamente?

Después de añadir log4j a mi aplicación obtengo la siguiente salida cada vez que ejecuto mi aplicación:

log4j:WARN No se han encontrado apéndices para el registrador (slideselector.facedata.FaceDataParser).
log4j:WARN Por favor, inicialice el sistema log4j correctamente.

Parece que esto significa que falta un archivo de configuración. ¿Dónde debería estar este archivo de configuración y cuál es un buen contenido de inicio?

Estoy usando java simple para desarrollar una aplicación de escritorio. Así que no hay servidor web, etc ...

Solución

Log4j por defecto busca un archivo llamado log4j.properties o log4j.xml en el classpath. Puede controlar qué archivo utiliza para inicializarse configurando las propiedades del sistema como se describe aquí (busque la sección "Procedimiento de inicialización por defecto").

Por ejemplo:

java -Dlog4j.configuration=customName ....

Hará que log4j busque un archivo llamado customName en el classpath.

Si usted está teniendo problemas me parece útil para activar el log4j.debug:

-Dlog4j.debug

Imprime en System.out un montón de información útil sobre el archivo que utilizó para inicializarse, qué registradores / appenders se configuraron y cómo, etc.

El archivo de configuración puede ser un archivo de propiedades java o un archivo xml. Aquí hay un ejemplo del formato del archivo de propiedades tomado de la página de documentación de introducción de log4j:

log4j.rootLogger=debug, stdout, R

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=example.log

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
Comentarios (5)

Encuentra un log4j.properties o log4j.xml en línea que tenga un apéndice raíz, y ponlo en tu classpath.

### direct log messages to stdout ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.rootLogger=debug, stdout

se registrará en la consola. Yo prefiero registrar en un archivo para poder investigar después.

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.maxFileSize=100KB
log4j.appender.file.maxBackupIndex=5
log4j.appender.file.File=test.log
log4j.appender.file.threshold=debug
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug,file

aunque para aplicaciones de registro verboso 100KB por lo general necesita ser aumentado a 1MB o 10MB, especialmente para la depuración.

Personalmente configuro varios registradores, y configuro el registrador raíz a nivel de advertencia o error en lugar de depuración.

Comentarios (0)

¿En qué está desarrollando? ¿Estás usando Apache Tomcat?

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyyMMdd HH:mm:ss.SSS} [[%5p] %c{1} [%t]] %m%n

Tengo una propiedad como esta en una aplicación Java mía.

Comentarios (0)