2012-09-17 23 views
30

Tengo una dependencia para SLF4J. Estoy consiguiendo este error:SLF4J: Error al cargar la clase "org.slf4j.impl.StaticLoggerBinder". en un proyecto de Maven

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 

Aquí está mi entrada experta:

<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>log4j</groupId> 
     <artifactId>log4j</artifactId> 
     <version>1.2.16</version> 
    </dependency> 

¿Dónde está el problema?


EDIT: Sin dependencia log4j me sale el siguiente excepción

Failed to instantiate SLF4J LoggerFactory 
Reported exception: 
java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder 
    at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121) 
    at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111) 
    at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254) 
    at org.apache.bval.jsr303.ConfigurationImpl.<clinit>(ConfigurationImpl.java:50) 
    at java.lang.J9VMInternals.initializeImpl(Native Method) 
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:228) 
    at org.apache.bval.jsr303.ApacheValidationProvider.createGenericConfiguration(ApacheValidationProvider.java:66) 
    at javax.validation.Validation$GenericBootstrapImpl.configure(Validation.java:173) 
    at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:50) 
    at com.daimler.zv9.basic.entity.AbstractEntity.<clinit>(AbstractEntity.java:73) 
    at java.lang.J9VMInternals.initializeImpl(Native Method) 
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:228) 
    at java.lang.J9VMInternals.initialize(J9VMInternals.java:195) 
    at java.lang.Class.forNameImpl(Native Method) 
    at java.lang.Class.forName(Class.java:168) 

Edit2: Es un ejemplo de árbol MAVEN que consigo

[INFO] com.myCompany.abc:ABC_Document:ejb:0.0.1-SNAPSHOT 
[INFO] +- com.myCompany.abc:ABC_Basic:jar:0.0.1-SNAPSHOT:compile 
[INFO] +- com.myCompany.iap:javax.j2ee:jar:5.0.0:provided 
[INFO] +- com.myCompany.iap:logging:jar:5.0.0:provided 
[INFO] +- com.myCompany.iap:util:jar:5.0.0:provided 
[INFO] +- junit:junit:jar:4.8.2:test 
[INFO] +- javax.servlet:jstl:jar:1.2:provided 
[INFO] +- org.slf4j:slf4j-api:jar:1.6.6:compile 
[INFO] +- org.slf4j:slf4j-simple:jar:1.6.6:compile 
[INFO] \- org.mockito:mockito-all:jar:1.9.0:test 
+0

@Ceki Tal vez usted tiene una idea? – Kayser

+0

¿Es este un programa independiente o implementado en algún servidor? – basiljames

+0

@basiljames me sale el error con el comando mvn openjpa: sql. no está instalado en ningún lado – Kayser

Respuesta

33

Supongo que está utilizando Eclipse como entorno en desarrollo.

Eclipse Juno, Indigo y Kepler cuando se utiliza la versión empaquetada maven (m2e), no están suprimiendo el mensaje SLF4J: Error al cargar la clase "org.slf4j.impl.StaticLoggerBinder". Este comportamiento está presente desde la versión m2e 1.1.0.20120530-0009 en adelante.

Aunque, esto se indica como un error, sus registros se guardarán normalmente. El error resaltado seguirá presente hasta que haya una solución para este error. Más sobre esto en el m2e support site.

La solución actual disponible es utilizar una versión externa de maven en lugar de la versión incluida de Eclipse. Puede encontrar acerca de esta solución y más detalles con respecto a este error en la siguiente pregunta, que creo que describe el mismo problema al que se enfrenta.

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". error

+0

Si el uso de la versión externa de Maven no funciona, le aconsejo que elimine el contenido de su repositorio local de Maven. – Kowlown

15

Quitar

<dependency> 
    <groupId>log4j</groupId> 
    <artifactId>log4j</artifactId> 
    <version>1.2.16</version> 
</dependency> 

slf4j-log4j12 es la unión de slf4j usted no necesita agregar otra dependencia log4j log4j.

Agregado
proporcionan la configuración de log4j en log4j.properties y agregarlo a la ruta de clase. Hay configuraciones de ejemplo here

o puede cambiar su unión a

<dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-simple</artifactId> 
    <version>1.6.1</version> 
</dependency> 

si está configurando slf4j debido a algunas dependencias que lo requieran.

+0

Lo eliminé. Me estoy haciendo esta excepción 'No se ha podido crear una instancia de SLF4J LoggerFactory excepción del informe: java.lang.NoClassDefFoundError: org.slf4j.impl.StaticLoggerBinder \t en org.slf4j.LoggerFactory.bind (LoggerFactory.java:121) \t en org .slf4j.LoggerFactory.performInitialization (LoggerFactory.java:111) \t en org.slf4j.LoggerFactory.getILoggerFactory (LoggerFactory.java:268) ' – Kayser

+0

One similar [post] (http://stackoverflow.com/questions/7421612/ slf4j-failed-to-load-class-org-slf4j-impl-staticloggerbinder) – basiljames

+0

Cuando slf4j-log4j se declara una dependencia agregando log4j como una dependencia es innecesaria pero tampoco debería doler. Además, log4j.properties es irrelevante para la pregunta que se hace. – Ceki

2

El mensaje que mencionas es bastante claro:

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". 
SLF4J: Defaulting to no-operation (NOP) logger implementation 
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. 

API SLF4J no pudo encontrar una unión, y decidió por defecto a una aplicación NOP. En su caso, slf4j-log4j12.jar de alguna manera no estaba visible cuando la clase LoggerFactory se cargó en la memoria, lo que es muy extraño. ¿Qué te dice "dependencia mvn: árbol"?

Las diversas declaraciones de dependencia pueden no estar directamente en causa aquí. Sospecho que se está implementando una versión anterior a la 1.6 de slf4j-api.jar sin su conocimiento.

+0

Eso es qué dependencia: tree dice: '[INFO] [INFO] --- maven-dependency-plugin: 2.5.1: tree (default-cli) @ GEM_Web --- [INFO] com.mycompany.proj : My_Web: war: 0.0.1-SNAPSHOT ... [INFO] + - javax.servlet: jstl: jar: 1.2: proporcionado [INFO] + - org.slf4j: slf4j-api: jar: 1.6.6: compilar [INFO] + - org.slf4j: slf4j-simple: jar: 1.6.6: compilar [INFO] \ - org.mockito: mockito-all: jar: 1.9.0: test' – Kayser

+0

Lo anterior no es muy legible. OMI, debe moverse a la parte de la pregunta. – Ceki

+0

Gracias por la pista. Actualicé la pregunta – Kayser

6

me encontré con esto en IntelliJ fijo y añadiendo lo siguiente a mi pom:

<!-- logging dependencies --> 
    <dependency> 
     <groupId>ch.qos.logback</groupId> 
     <artifactId>logback-classic</artifactId> 
     <version>${logback.version}</version> 
     <exclusions> 
      <exclusion> 
       <!-- Defined below --> 
       <artifactId>slf4j-api</artifactId> 
       <groupId>org.slf4j</groupId> 
      </exclusion> 
     </exclusions> 
    </dependency> 

    <dependency> 
     <groupId>org.slf4j</groupId> 
     <artifactId>slf4j-api</artifactId> 
     <version>${slf4j.version}</version> 
    </dependency> 
+0

Una mejor solución sería usar un elemento 'dependencyManagement' que clave la versión para' slf4j-api' –

+0

Estoy usando el arranque de resorte 15. Esta solución funcionó para mí –

Cuestiones relacionadas