2010-08-02 14 views
40

Tengo una aplicación de la primavera experto & que quiero iniciar la sesión. Estoy dispuesto a utilizar SLF4J.¿Cómo configuro Spring y SLF4J para que pueda obtener el registro?

quiero poner todos mis archivos de configuración en un directorio de ruta de clases {}/config incluyendo log4j.xml y luego init utilizando un grano 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, aparece esta advertencia y no se registra.

log4j: WARN No se encontraron appenders 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.

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

+0

Supongo. ¿Funciona de manera diferente si intenta una ruta completa * C: /config/log4j.xml * – JoseK

+0

Nope. La codificación dura no ayuda. = ( –

Respuesta

43

Además de la respuesta de Jatin:

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

Si está utilizando maven, puede detectar de dónde proviene el registro de recursos comunes utilizando mvn dependency:tree y excluirlo de todas las dependencias que lo requieran mediante exclusiones de dependencia. Sin embargo, puede necesitar 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> 
+1

me gusta el tercer enfoque sugerencia d aquí - http://slf4j.org/faq.html#excludingJCL - utilizando artefactos vacíos. Esta opción se recomienda en la versión actual del manual de referencia de Spring. –

26

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> 
+0

El ejemplo tiene el archivo de configuración log4j directamente en el classpath, no en un directorio de configuración, que es lo que me gustaría. –

+0

En realidad eso sí me ayudó un poco. Ahora tengo que iniciar sesión en mi aplicación, es solo primavera eso es quejarse. –

+0

Si una clase particular se queja necesita agregar el paquete requerido a la lista de empaquetado registrado con el registrador. También puede ponerlo en una carpeta de configuración y agregar esa carpeta a la ruta de clase. – Jatin

1

archivo log4j tener en paquete por defecto

4

Uso de configuración golpe para la aplicación de la JCL API en el 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 más información consultar here

6

Sólo por el bien de la integridad, una variante 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 

No se olvide sin embargo a desactivar commons-logging dependencia que brota de la dependencia de la primavera al igual que en la respuesta aceptada (de Stijn).

1

me gusta la forma logback, y por slf4j, nos haremos 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

0

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 mejor sería tener la configuración en web.xml o como un parámetro JVM (-Dlog4j.configuration=.../conf/log4j.xml o con 'file:' prefijo como -Dlog4j.configuration=file:conf/log4j.properties para algunos casos)

Cuestiones relacionadas