java - property - Configurando log4j2 y log4j usando un solo archivo xml log4j2
log4j system property (2)
En un proyecto de maven que usa log4j2, es posible excluir log4j de los módulos que lo utilizan, en el pom, para permitir que log4j2 asuma el control:
<dependencies>
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.4</version>
<!--force usage of log4j2-->
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-web</artifactId>
<version>2.3</version>
</dependency>
</dependencies>
Más información sobre eso en el log4j FAQ
He migrado mi aplicación a log4j 2, y la he configurado a través de log4j2.xml
Sin embargo, algunas de las bibliotecas que estoy usando dependen de log4j 1. Si ejecuto la aplicación usando:
-Dlog4j.configurationFile=path/to/log4j2.xml
log4j 1 se queja de no encontrar un archivo de configuración. Estoy usando el puente log4j 1.x proporcionado por log4j 2, log4j-1.2-api-2.0-rc1.jar. ¿Es posible configurar ambos usando un solo log4j2.xml?
Una alternativa que he probado es configurar log4j y log4j2 juntos:
-Dlog4j.configurationFile=path/to/log4j2.xml -Dlog4j.configuration=path/to/log4j.xml
Mi preocupación es la fragmentación de mis archivos de configuración de registro y salida. También me preocupan los posibles conflictos entre log4j.xml y log4j2.xml. por ejemplo, el archivo de error error.log está configurado para usar un FileAppender en log4j 1 y un RollingFileAppender en log4j 2.
¿Algún consejo?
[Nota]
Este es el error que estoy viendo:
log4j:WARN No appenders could be found for logger (org.apache.activemq.util.ThreadPoolUtils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
La versión de log4j 2 que estoy usando es log4j 2.0 rc1.
[responder]
Parece que activemq-5.8.0.jar fue incluido con log4j 1. La solución fue simplemente cargar el puente log4j 1.x antes de activemq.
Recomendaría usar el adaptador log4j-1.2 que se incluye en la distribución log4j2. De esa manera, cualquier biblioteca codificada para la API log4j-1.2 funcionará con log4j2 sin ningún cambio de código.
Tu ruta de clase debe incluir:
- log4j-api-2.6.1.jar
- log4j-core-2.6.1.jar
- log4j-1.2-api-2.6.1.jar
- log4j2.xml
Tu ruta de clase no debe incluir:
- log4j-1.2.x.jar
- log4j.properties o log4j.xml (estos serán ignorados por log4j2 de todos modos)
Véase también http://logging.apache.org/log4j/2.x/faq.html#which_jars