java - logs - Problema con la configuración Logging/Log4j de Commons en la aplicación de primavera con tomcat 6
tomcat log per application (6)
Tengo un problema con una configuración de inicio de sesión en una aplicación de Internet implementada bajo Tomcat 6.
La aplicación web usa la api de registro de recursos comunes, en el tiempo de ejecución se debe usar log4j. El archivo de registro se crea pero permanece vacío; no se registran entradas.
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 archivo / my.log, pero no aparecen registros. Los 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 están incluidos en WEB-INF / lib. ¿Alguna idea de lo que está mal aquí?
Necesita compilar el componente adicional para el registro completo de recursos comunes. Por defecto, 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 archivo tomcat-juli.jar en el directorio / bin de Tomcat y coloque el archivo tomcat-juli-adapters.jar en el directorio / lib junto con log4j y config.
Tenga especial cuidado de no haber colocado log4j.jar en el directorio commons / lib de Tomcat. 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 no apresure la inicialización de otras aplicaciones web. Cada aplicación web necesitará utilizar ID de registrador únicos, lo que se puede lograr con nombres de paquetes únicos.
El uso de un log4j común en Tomcat con múltiples aplicaciones web provoca conflictos graves cuando tiene bibliotecas compartidas que todos quieren hacer el registro, como Hibernate o Spring. La siguiente aplicación web que intenta inicializar log4j puede cerrar el registrador de la anterior. Puede ser un desastre.
Tal vez yo estoy equivocado. Por favor intenta lo siguiente:
A) Agregue un appender a my.package como: O B) Reduzca el nivel de registro de root a INFO
si está utilizando log4j + logging común, puede evitar la mayoría de las configuraciones anteriores. registro común LogFactory tiene una función de descubrimiento similar a JAXP, en la siguiente prioridad, en busca de 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 la clase, use la clase contenedora correspondiente (Log4JLogger). 4. Jdk14Logger 5. SimpleLog
solo asegúrese de que tanto common-logging.jar como common-logging-api.jar y log4j.jar en classpath.
Tuve un problema similar y encontré una solución ahora. Comience tomcat con un parámetro adicional:
-Dorg.apache.commons.logging.LogFactory = org.apache.commons.logging.impl.LogFactoryImpl
Existen numerosas instancias documentadas en la web que advierten a las personas sobre el uso del registro de uso común. Tanto es así, que SLF4J está ganando mucha popularidad.
Teniendo en cuenta que no está interesado en utilizar Tomcat con Log4j, debe usar Log4j directamente en su aplicación. Particularmente si no hay posibilidad de que cambie los marcos de registro en el futuro. Reduce la complejidad de su aplicación y elimina cualquier problema de cargador de clases que tenga con el registro de commons.
Esta debería ser una búsqueda relativamente fácil y reemplazarla en su texto, ya que tanto el registro de recursos comunes como log4j usan una estructura de llamadas similar para sus métodos de registro.