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