Log4j Advertencia durante la inicialización?

Estoy tratando de aprender sobre log4j, así que traté de hacer algo que es muy simple;

Logger logger = Logger.getLogger("ClientApplicationLog"); logger.info("Logger Test"); 

Pero después de hacer esto, obtuve;

 log4j:WARN No appenders could be found for logger (ClientApplicationLog). log4j:WARN Please initialize the log4j system properly. 

¿Sabes dónde estoy equivocado?

Gracias a todos

Te faltan log4j.properties o log4j.xml en tu classpath.

Puede omitir esto mediante el uso de

 BasicConfigurator.configure(); 

Pero ten cuidado, esto SOLO se registrará en System.out y no se recomienda. Realmente debería usar uno de los archivos anteriores y escribir en un archivo de registro.

Un ejemplo muy simple de log4j.properties sería

 #Log to Console as STDOUT log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c %3x - %m%n #Log to file FILE log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File=logfile.log log4j.appender.file.DatePattern='.'yyyy-MM-dd log4j.appender.file.append=true log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c %3x - %m%n #Root Logger log4j.rootLogger=INFO, stdout, file 

Debe tener un log4j.xml en algún lugar de la ruta de su clase con información que le indique dónde iniciar sesión, cómo iniciar sesión, etc. Como alternativa, puede establecer todo esto programáticamente en el código, pero es mucho mejor tener flexibilidad en su implementación.

Mi log4j.xml se ve así:

                        

Esta es solo la advertencia.

Fijación

Esto ocurre cuando los archivos de configuración predeterminados log4j.properties y log4j.xml no se pueden encontrar y la aplicación no realiza ninguna configuración explícita.

Para solucionarlo, simplemente cree / copie log4j.properties o log4j.xml en su ubicación en el classpath (generalmente lo mismo que en los archivos jar).

Opcionalmente, configure la opción java: -Dlog4j.configuration=file:///path/to/log4j.properties .

log4j usa Thread.getContextClassLoader().getResource() para localizar los archivos de configuración predeterminados y no verifica directamente el sistema de archivos. Conocer la ubicación adecuada para colocar log4j.properties o log4j.xml requiere comprender la estrategia de búsqueda del cargador de clases en uso. log4j no proporciona una configuración predeterminada, ya que la salida a la consola o al sistema de archivos puede estar prohibida en algunos entornos.

Depuración

Para la depuración, puede intentar utilizar -Dlog4j.debug=true parámetro -Dlog4j.debug=true .

Configuración de log4j.properties

Configuración de muestra de log4j.properties :

 # Set root logger level to DEBUG and its only appender to A1. log4j.rootLogger=DEBUG, A1 # A1 is set to be a ConsoleAppender. log4j.appender.A1=org.apache.log4j.ConsoleAppender # A1 uses PatternLayout. log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n # Print only messages of level WARN or above in the package com.foo. log4j.logger.com.foo=WARN 

Aquí hay otro archivo de configuración que usa múltiples appenders:

 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 

Apache Solr

Si usa Solr, copie /example/resources/log4j.properties en una ubicación en el classpath.

La configuración de muestra de log4j.properties de Solr es como sigue:

 # Logging level solr.log=logs/ log4j.rootLogger=INFO, file, CONSOLE log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%-4r [%t] %-5p %c %x \u2013 %m%n #- size rotation with log cleanup. log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.MaxFileSize=4MB log4j.appender.file.MaxBackupIndex=9 #- File to log to and log format log4j.appender.file.File=${solr.log}/solr.log log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.layout.ConversionPattern=%-5p - %d{yyyy-MM-dd HH:mm:ss.SSS}; %C; %m\n log4j.logger.org.apache.zookeeper=WARN log4j.logger.org.apache.hadoop=WARN # set to INFO to enable infostream log messages log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF 

Ver también:

  • Breve introducción a log4j: procedimiento de inicialización predeterminado
  • ¿Por qué log4j no puede encontrar mis propiedades en una aplicación J2EE o WAR?

Debe definir un appender para su registrador (por ejemplo, un archivo de registro), por ejemplo, en un archivo log4j.properties en classpath.

Este tutorial debe contener todo lo que necesita saber.

Parece que tu log4j.properties no está en la ruta de clase. Asegúrese de que sea así y de que dentro de su archivo de configuración tenga un registrador con el nombre “ClientApplicationLog” definido.