java web-services log4j axis

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.