java - Por favor, inicialice el sistema log4j correctamente. Mientras se ejecuta el servicio web
web-services axis (5)
Tal vez parece tonto preguntar esto pero estoy confundido. Me referí a la configuración de la propiedad Log4j pero no parece ayudar.
He escrito un sencillo servicio web HelloWorld. Y mientras lo ejecuto recibo el error algo como esto:
log4j: WARN No se pudieron encontrar agregadores para el registrador (org.apache.axis.transport.http.AxisServlet). log4j: WARN Inicialice el sistema log4j correctamente.
No estoy seguro de por qué está sucediendo.
Estoy generando el servicio web utilizando Eclipse y desplegado en Tomcat 6.0. Reviso la Guía del Desarrollador de Axis y de acuerdo con ellos.
log4j.configuration = log4j.properties Use esta propiedad del sistema para especificar el nombre de un archivo de configuración Log4J. Si no se especifica, el archivo de configuración predeterminado es log4j.properties. Se proporciona un archivo log4j.properties en axis.jar.
No encontré log4j.properties en axis.jar
.
¿Alguna ayuda en esto?
Advertencia No se pueden encontrar agregadores para el registrador significa que está usando el sistema de registro log4j
, pero no ha agregado ningún Anexador (como FileAppender, ConsoleAppender, SocketAppender, SyslogAppender, etc.) en su archivo de configuración o falta el archivo de configuración .
Hay tres formas de configurar log4j: con un archivo de propiedades ( log4j.properties
), con un archivo XML y mediante código Java ( rootLogger.addAppender(new NullAppender());
).
Si tiene un archivo de propiedades presente (por ejemplo, al instalar Solr), debe colocar este archivo dentro de su directorio classpath .
ruta de clase
Aquí hay algunas sugerencias de comandos para determinar su valor de classpath:
$ echo $CLASSPATH
$ ps wuax | grep -i classpath
$ grep -Ri classpath /etc/tomcat? /var/lib/tomcat?/conf
o desde Java: System.getProperty("java.class.path")
.
Gato
Si está utilizando Tomcat, puede colocar su log4j.properties
en: /usr/share/tomcat?/lib/
or /var/lib/tomcat?/webapps/*/WEB-INF/lib/
.
Solr
Para la referencia, Solr log4j.properties
ve así:
# 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
Bueno, si ya había creado el log4j.properties, agregaría su ruta a la ruta de clase para que se encuentre durante la ejecución.
Sí, el thingy buscará este archivo en el classpath.
Ya que dijo que buscó en el eje y no encontró uno, asumo que no tiene log4j.properties, así que aquí hay un ejemplo simple pero completo.
Crearlo en algún lugar y agregar a su classpath. Póngalo por ejemplo, en c: /proj/resources/log4j.properties
En su ruta de clase, simplemente agregue .......; c: / proj / resources
# Root logger option
log4j.rootLogger=DEBUG, stdout, file
# Redirect log messages to console
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{1}:%L - %m%n
# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=c:/project/resources/t-output/log4j-application.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Esos mensajes son algo complicados, lo suficiente para que la gente los haya creado para que quede más claro: https://issues.apache.org/bugzilla/show_bug.cgi?id=25747
Lo complicado de ellos es que las advertencias se escriben si Log4j no puede encontrar su log4j.properties
(o log4j.xml
), pero también si el archivo está bien y es excelente, pero su contenido no está completo desde el punto de vista de la configuración.
El siguiente párrafo se toma de aquí: http://svn.apache.org/repos/asf/logging/log4j/tags/v1_2_9/docs/TROUBLESHOOT.html
La salida de registro se escribe en un destino utilizando un appender. Si no se adjunta ningún agregador a una categoría ni a ninguno de sus antepasados, recibirá el siguiente mensaje cuando intente iniciar sesión:
log4j: No appenders could be found for category (some.category.name).
log4j: Please initialize the log4j system properly.
Log4j no tiene un destino de registro predeterminado. Es responsabilidad del usuario asegurarse de que todas las categorías puedan heredar un appender. Esto se puede lograr fácilmente adjuntando un appender a la categoría raíz.
Puede encontrar información sobre cómo configurar el registrador raíz ( log4j.rootLogger
) en la documentation log4j, básicamente agregando algo tan simple como este al principio del archivo:
log4j.rootLogger=debug, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
Esto debería borrar los mensajes WARN que recibes al iniciar (asegúrate de no tener un appender llamado stdout
; también debes tener cuidado con el nivel que le das al registrador raíz; la debug
será muy detallada y todas las bibliotecas en tu aplicación empezarán a escribir cosas a la consola).
En cuanto al log4j.properties
/ log4j.xml
, le sugiero que coloque este archivo en /WEB-INF/classes
ya que es importante tenerlo expuesto para diferentes ajustes (activar / desactivar registros, cambiar los niveles de registro, etc.). También puede tenerlo dentro de un JAR en el classpath (como especificó en su comentario), pero se incluirá en el archivo (con suerte en el lugar correcto dentro del archivo) y no será tan fácil de manejar como si Estaban en /WEB-INF/classes
.
Si la siguiente declaración está presente en su clase, entonces su log4j.properties debe estar en la carpeta de origen java (src), si es un ejecutable jar, debe estar empaquetado en un archivo jar, no en un archivo separado.
static Logger log = Logger.getLogger(MyClass.class);
Gracias,
Tienes que crear tu propio log4j.properties
en la carpeta classpath.