2012-06-29 14 views
5

Acabo de recoger una aplicación web existente en el trabajo que se supone que debe registrar su actividad utilizando Log4J. Configuré mi espacio de trabajo exactamente como me dijeron y todo lo demás (conexión de base de datos, autenticación, etc.) funciona bien, excepto que no se escribe nada en el archivo de registro. Otras aplicaciones similares no tienen problemas para iniciar sesión.Log4J no registra nada

He visto la consola de WebSphere cuando se inicia la aplicación y no hay errores allí que puedan indicar por qué Log4J no está iniciando sesión.

Mencioné esto a otro desarrollador (que una vez trabajó en esta aplicación, pero no por un tiempo y está más desactualizado que yo) que comentó que era un comportamiento muy extraño, pero no tenía idea de por qué podría no registrarse y no informar ningún error.

He revisado el archivo de configuración y el archivo de propiedades y todo parece OK. Sospecho que Log4J nunca está leyendo log4j.xml, pero no estoy seguro de eso. Ha pasado un tiempo desde que trabajé con Log4J. ¿Alguien tiene algunos buenos consejos para solucionar este tipo de problemas?

PD: Hay instancias de esta aplicación que se implementan en varios servidores de prueba/QA/prod y todas estas instancias funcionan bien. Es solo en estaciones de trabajo locales que el registro parece fallar silenciosamente.


Actualización: Por lo tanto, no parece ser un problema con la forma en que se despliega la aplicación. Cambié el modo del cargador de clases a "Parent Last" y puedo ver que el archivo Log4J se está leyendo al menos ahora. Y la primera acción que intento desencadena un ClassNotFoundException diciendo que org.apache.commons.logging.impl.Log4jFactory no se puede encontrar.


segunda actualización: he notado algo extraño ... La aplicación tiene dos proyectos de Guerra - una de ellas es para la interfaz de usuario y el otro es para algunos servicios web. El proyecto que es para la IU es registrando con éxito sus operaciones en el archivo de registro. El proyecto de servicio web es el que falla con el ClassNotFoundException. Ambos tienen commons-logging.jar enumerados como una dependencia de módulo JavaEE, y ninguno de ellos tiene una configuración de registro específica del proyecto (todos los archivos de configuración están en un proyecto de recursos).

Una diferencia importante es que ese proyecto de interfaz de usuario incluye algunos otros marcos internos (pre-compilados como JAR) que podría ya incluyen configuraciones de registro necesarios y tal vez ahí es donde la diferencia es.

También traté de usar la respuesta (un archivo llamado org.apache.commons.logging.LogFactory en los servicios META-INF/con una línea que contiene: "org.apache.commons.logging.impl.Log4jFactory") de esta pregunta: Websphere all logs are going to SystemOut.log pero no pareció ayudar.

+0

¿Qué tipo de instancia de registrador es? Como en RollingFileAppender – Woot4Moo

+0

@ Woot4Moo: es un FileAppender. – FrustratedWithFormsDesigner

+0

¿Puedes publicar tu archivo de configuración? ¿Son las configuraciones iguales en todos los entornos? – evanwong

Respuesta

2

Lo último que cambié y que finalmente hizo que el inicio de sesión funcionara correctamente fue cambiar el modo del cargador de clases a "PARENT_FIRST" y la política del cargador de clases WAR a "Aplicación". La configuración predeterminada inicial era "PARENT_FIRST"/"Módulo". Lo cambié a "PARENT_LAST"/"Aplicación" siguiendo el consejo de un compañero de trabajo que dice que el registro funciona bien para ellos y este es el único cambio que tienen que hacer cuando crean un nuevo entorno limitado para esta aplicación. No estoy seguro de por qué tuve que ir con "PARENT_FIRST"/"Aplicación", pero al menos funciona ahora.


ACTUALIZACIÓN:

me trató la creación de un nuevo espacio de trabajo y que tenía el mismo problema. Resulta que necesita "PARENT_FIRST"/"Application" Y un archivo llamado org.apache.commons.logging.LogFactory en los servicios META-INF/con una línea que contenga: "org.apache.commons.logging.impl.Log4jFactory" . No tener el archivo hace que el registro falle (generalmente con un mensaje que dice que no se puede encontrar Log4J).

0

Soy consciente de que no es su exacta mismo síntoma, pero hay problemas conocidos con log4j si su aplicación (o cualquier cosa que use) usa Commons Logging. Vea si this question/answer es relevante.

0

no he podido crear el archivo de registro, he utilizado el archivo logback.xml en la aplicación de webservice de primavera y lo he implementado en el servidor websphere ... Pero cuando he usado el archivo log4j.properties está creando un archivo de registro. Yo he dado la dependencia apropiada adecuada para log4j y slf4j .. archivo logback.xml

<file>C:/abc/myLogFile.log</file> 
<append>true</append> 
<encoder> 
    <pattern>%d [%thread] %-5level %logger{35} - %msg%n</pattern> 
</encoder></appender> 

`

dependencia:

<dependency> 
    <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${slf4j.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
     <version>${logback.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-core</artifactId> 
     <version>${logback.version}</version> 
    </dependency> 
0

que tenía un problema en el que no estaba mostrando log4j cualquier cosa en uno de mis proyectos. Resultó que había agregado un espacio principal en el nombre de clase en el archivo log4j2.xml. Log4j hace una búsqueda de diccionario por nombre de clase. Por lo tanto, cualquier espacio inicial o final en el nombre de clase haría que esa entrada particular fuera inválida.