tutorial mvc framework español ejemplos edicion cuarta books arquitectura accion java spring logging log4j slf4j

java - mvc - ¿Cómo configuro Spring y SLF4J para poder iniciar sesión?



spring java tutorial (7)

Además de la respuesta de Jatin:

Spring usa Jakarta Commons Logging como una API de registro. Para iniciar sesión en slf4j, debe asegurarse commons-logging no se encuentre en el classpath. jcl-over-slf4j es un jcl-over-slf4j reemplazo para el registro de commons.

Si está utilizando maven, puede detectar dónde proviene el registro de mvn dependency:tree utilizando mvn dependency:tree y excluirlo de todas las dependencias que lo requieran utilizando exclusiones de dependencia. Sin embargo, es posible que necesite ejecutar mvn dependency:tree varias veces, ya que solo muestra la primera aparición de una dependencia transitiva.

<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${org.springframework.version}</version> <exclusions> <exclusion> <artifactId>commons-logging</artifactId> <groupId>commons-logging</groupId> </exclusion> </exclusions> </dependency>

Tengo una aplicación maven & spring que quiero iniciar sesión. Tengo muchas ganas de usar SLF4J.

Quiero poner todos mis archivos de configuración en un directorio {classpath} / config incluyendo log4j.xml y luego iniciar usando un bean de primavera.

p.ej

<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> <property name="targetClass" value="org.springframework.util.Log4jConfigurer"/> <property name="targetMethod" value="initLogging"/> <property name="arguments"> <list> <value>classpath:config/log4j.xml</value> </list> </property> </bean>

Sin embargo, recibo esta advertencia y no registro.

log4j: WARN No se pudieron encontrar apéndices para logger (org.springframework.context.support.ClassPathXmlApplicationContext). log4j: WARN Inicialice el sistema log4j correctamente. log4j: WARN Consulte http://logging.apache.org/log4j/1.2/faq.html#noconfig para obtener más información.

Busqué en Google y no encuentro un ejemplo simple para configurar esto. ¿Algunas ideas?


Encontrará un ejemplo en https://github.com/mbogoevici/spring-samples/tree/master/mvc-basic/trunk . Debe incluir algunas dependencias en su archivo POM para habilitar el registro.

<!-- Logging --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${org.slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${org.slf4j.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>${org.slf4j.version}</version> <scope>runtime</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.16</version> <scope>runtime</scope> </dependency>


Me gusta la forma de logback, y para slf4j, hacemos la configuración similar:

<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> </dependency>

slf4j-log4j12 introducirá automáticamente slf4j-api y log4j, por lo que no es necesario poner tantas dependencias


Simplemente agregue lazy-init="false" para cargar ansiosamente el bean para la configuración log4j en su contexto raíz. Eso debería resolver el mensaje WARN log4j:WARN No appenders could be found for logger

Ejemplo:

<bean id="log4jInitialization" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean" lazy-init="false">

Un enfoque más adecuado sería tener la configuración en web.xml o como un parámetro de JVM ( -Dlog4j.configuration=.../conf/log4j.xml o con el prefijo ''file:'' como -Dlog4j.configuration=file:conf/log4j.properties para algunos casos)


Solo para completar, una logback-classic :

<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.6.6</version> <scope>runtime</scope> </dependency>

Sin embargo, no olvide deshabilitar commons-logging dependencia de commons-logging que brota de la dependencia de Spring como en la respuesta aceptada (Stijn).


Use la configuración de golpe para la implementación de la JCL API en la classpath :

<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.0.0.RELEASE</version> <scope>runtime</scope> <exclusions> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.5.8</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.5.8</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.8</version> <scope>runtime</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> <scope>runtime</scope> </dependency> </dependencies>

para obtener más información, consulte here


mantener el archivo log4j en el paquete predeterminado