org moduleexception logger logfactory log4jlogger libreria impl getclassloader error commons application java spring logging log4j log4j2

java - moduleexception - libreria org apache commons logging logfactory



Logging Spring utilizando Log4j2 (2)

Estoy intentando usar Log4j2 para imprimir los registros de Spring en un archivo y una consola. Supongo que es un problema en mi configuración de Log4j2. No he podido hacerlo funcionar. Tengo esta configuración en mi archivo log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?> <configuration name="defaultConfiguration" status="warn" strict="true" monitorInterval="5"> <properties> <property name="patternlayout">%d{ISO8601} [%t] %-5level %logger{36} - %msg%n%throwable{full}</property> <property name="filename">${env:MY_ROOT}/logs/mylog.log</property> <property name="filenamePattern">${env:MY_ROOT}/logs/mylog-%d{yyyy-dd-MM}-%i.log.gz</property> </properties> <appenders> <appender name="Console" type="Console" target="SYSTEM_OUT"> <layout type="PatternLayout" pattern="${patternlayout}" /> </appender> <appender name="File" type="RollingFile" fileName="${filename}" filePattern="${filenamePattern}" bufferedIO="true" immediateFlush="true" append="true"> <layout type="PatternLayout" pattern="${patternlayout}" /> <Policies> <TimeBasedTriggeringPolicy /> <SizeBasedTriggeringPolicy size="50 MB" /> </Policies> <DefaultRolloverStrategy max="30" /> </appender> <appender name="AsynchFile" type="asynch" blocking="true" bufferSize="128"> <appender-ref ref="File" /> </appender> </appenders> <loggers> <root level="info"> <appender-ref ref="Console" /> <appender-ref ref="AsynchFile" /> </root> <logger name="org.springframework.beans"> <appender-ref ref="Console" /> <appender-ref ref="AsynchFile" /> </logger> </loggers> </configuration>

Estas son las dependencias que tengo en mi archivo pom: (probablemente algunas de ellas no son necesarias)

<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.6.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.6.6</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.0-beta5</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.0-beta5</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-1.2-api</artifactId> <version>2.0-beta5</version> </dependency> <dependency> <groupId>com.lmax</groupId> <artifactId>disruptor</artifactId> <version>3.0.0.beta3</version> </dependency>

No estoy haciendo nada relacionado con la primavera en mi código de Java. Estoy usando la clase Main de Apache Camel que lee mi configuración de primavera y carga los beans.

¿Qué estoy haciendo mal? ¡Gracias!

Edición: no obtengo registros de primavera en ninguna salida (consola o archivo). Sin embargo, puedo obtener los registros que creo en mi código java. Espero que esta aclaración ayude.


Este problema se debe a que Spring utiliza el registro común 1.X, por lo que si desea que este registro se enrute a Log4j 2, necesita agregar dependencias en su pom.xml

<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-jcl</artifactId> <version>2.1</version> </dependency>

No elimine sus dependencias 1.X de registro común


Mirando las dependencias en su pom, tiene este: slf4j-log4j12. Esto hace que las declaraciones de registro contra la API slf4j se enruten a la implementación de Log4j-1.2. Probablemente desee que estos se dirijan a la implementación de Log4j-2.0. ¿Se puede reemplazar slf4j-log4j12 con log4j-slf4j-impl y volver a intentarlo?