Pregunta

Tengo un problema con una configuración de registro en una aplicación web de despliegue desplegada en Tomcat 6.

La aplicación web utiliza la api de registro de derechos, en el tiempo de ejecución se debe usar log4j. El archivo de registro se crea pero permanece vacío, no se producen entradas de registro.

la configuración es la siguiente:

WEB-INF / web.xml:

 <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>/WEB-INF/log4j.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  </listener>

WEB-INF / classes / commons-logging.properties:

org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger

WEB-INF / log4j.xml:

<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

  <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
    ...
  </appender>
  <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
    <param name="File" value="${catalina.home}/logs/my.log"/>
    ...
  </appender>

  <logger name="my.package">
    <level value="INFO"/>
  </logger>

  <root>
    <level value="ERROR"/>
    <appender-ref ref="CONSOLE"/>
    <appender-ref ref="FILE"/>
  </root>
</log4j:configuration>

Se crean los registros de archivos / my.log, pero no aparecen registros. Son registros de información en la consola de Tomcat, pero no con el patrón de diseño configurado.

commons-logging-1.1.1.jar y log4j-1.2.14.jar se incluyen en WEB-INF / lib. ¿Alguna idea de lo que está mal aquí?

¿Fue útil?

Solución

Hay numerosas instancias documentadas en la web que advierten a las personas sobre el uso de los registros comunes. Tanto es así, que SLF4J está ganando mucha popularidad.

Teniendo en cuenta que no está interesado en usar Tomcat con Log4j, solo debe usar Log4j directamente en su aplicación. Particularmente si no hay posibilidad de que cambie los marcos de registro en el futuro. Reducirá la complejidad de su aplicación y eliminará cualquier problema con el cargador de clases que tenga con el registro de la propiedad.

Esta debería ser una búsqueda y reemplazo relativamente fácil en su texto, ya que commons-logging y log4j usan una estructura de llamada similar para sus métodos de registro.

Otros consejos

Tenga especial cuidado de que no haya colocado log4j.jar en el directorio Tomcat commons / lib. Si el cargador de clases raíz carga las bibliotecas log4j, se encontrará con conflictos y problemas de inicialización cuando sus aplicaciones web también intenten usar log4j.

Si necesita usar log4j para el registro común de Tomcat, deberá tener cuidado de que sus aplicaciones web no intenten cargar log4j también. Si tiene varias aplicaciones web en el servidor, necesitará disciplina para que la inicialización del registro de cada aplicación web no pisotee la inicialización de otras aplicaciones web. Cada aplicación web deberá usar ID de registrador únicas, que se pueden lograr con nombres de paquetes únicos.

El uso de un log4j común en Tomcat con múltiples aplicaciones web causa serios conflictos cuando ha compartido bibliotecas que todos desean iniciar sesión, como Hibernate o Spring. La próxima aplicación web que intente inicializar log4j puede cerrar el registrador de la anterior. Puede ser un desastre.

Tuve un problema similar y encontré una solución ahora. Inicie tomcat con parámetro adicional:

-Dorg.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.LogFactoryImpl

Es necesario compilar el componente adicional para el registro completo de bienes comunes. De forma predeterminada, Tomcat 6 utiliza una implementación codificada de commons-logging que siempre delega en java.util.logging.

Instrucciones de construcción aquí http://tomcat.apache.org/tomcat- 6.0-doc / building.html

Luego reemplace el tomcat-juli.jar en el directorio / bin de Tomcat y coloque el tomcat-juli-adapters.jar en el directorio / lib junto con log4j y config.

si está utilizando log4j + common logging, puede evitar la mayoría de las configuraciones anteriores. LogFactory de registro común tiene una característica de descubrimiento similar a JAXP, en la siguiente prioridad, buscando implementaciones de registro,    1. atributo de configuración org.apache.commons.logging.Log dentro del archivo commons-logging.properties    2. propiedad del sistema org.apache.commons.logging.Log    3. Si el Log4J está disponible en la ruta de clase, use la clase envoltura correspondiente (Log4JLogger).    4. Jdk14Logger    5. SimpleLog

solo asegúrese de que common-logging.jar y common-logging-api.jar y log4j.jar en classpath.

Puede ser que estoy equivocado. Por favor, intente lo siguiente:

A) Agregue el apéndice a my.package como:                     O B) Reducir el nivel de registro de la raíz a INFO.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top