2012-09-17 51 views
30

我对SLF4J有依赖性。我收到此错误:SLF4J:无法加载类“org.slf4j.impl.StaticLoggerBinder”。在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. 

这是我的Maven项:

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

问题出在哪里?


编辑:没有log4j的依赖,我得到以下异常

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:这是一个例子MAVEN树,我得到

[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也许你有一个想法? – Kayser

+0

这是一个独立的程序还是部署在某个服务器上? – basiljames

+0

@basiljames我得到与mvn openjpa:sql命令的错误。它没有安装在任何地方。 – Kayser

回答

33

我假设您使用Eclipse作为您的开发环境。

当使用捆绑maven版本(m2e)时,Eclipse Juno,Indigo和Kepler不禁止消息SLF4J:未能加载类“org.slf4j.impl.StaticLoggerBinder”。此行为在m2e 1.1.0.20120530-0009及之后的版本中提供。

虽然这表示为错误,您的日志将正常保存。突出显示的错误仍然存​​在,直到修复此错误。更多关于m2e support site的信息。

当前可用的解决方案是使用外部maven版本而不是捆绑版本的Eclipse。你可以在下面的问题中找到关于这个解决方案的更多细节,并且我相信这个问题描述了你面临的同样的问题。

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

+0

如果使用外部maven版本不起作用,我建议删除本地Maven存储库的内容。 – Kowlown

15

删除

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

slf4j-log4j12是log4j来进行slf4j您结合不需要添加其他log4j的依赖。

新增
log4j.properties提供log4j的配置,并将其添加到您的类路径。有示例配置here

,或者你可以由于它需要一些依赖更改绑定到

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

如果配置SLF4J。

+0

我删除它。我得到这个例外“未能实例SLF4J的LoggerFactory 报道例外: java.lang.NoClassDefFoundError:org.slf4j.impl.StaticLoggerBinder \t在org.slf4j.LoggerFactory.bind(LoggerFactory.java:121) \t在组织.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111) \t at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268)' – Kayser

+0

一个类似的[post](http://stackoverflow.com/questions/7421612/ SLF4J失败的对负载类ORG-SLF4J-IMPL-staticloggerbinder) – basiljames

+0

当SLF4J-log4j的声明的依赖性增加的log4j作为依赖 是不必要的,但它不应该伤害任何。而且, log4j.properties与被问到的问题无关。 – Ceki

2

你所提到的消息是很清楚的:

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. 

SLF4J API找不到任何有约束力的,并决定默认为NOP执行。在你的情况下,slf4j-log4j12.jar在LoggerFactory类被加载到内存中时不知何故不可见,这是很奇怪的非常。 “mvn依赖:树”告诉你什么?

各种依赖声明甚至可能不是直接原因。我强烈怀疑slf4j-api.jar之前的版本是在您不知情的情况下部署的。

+0

这就是依赖:树告诉:'[INFO] [INFO] --- Maven的依赖关系的插件:2.5.1:树(默认CLI)@ GEM_Web --- [INFO] com.mycompany.proj :My_Web:战争:0.0.1-快照... [INFO] + - 的javax.servlet:JSTL:罐子:1.2:提供 [INFO] + - org.slf4j:SLF4J的API中:jar:1.6.6:编译 [INFO] + - org.slf4j:SLF4J-简单:罐:1.6.6:编译 [INFO] \ - org.mockito:的Mockito全:罐:1.9.0:test' – Kayser

+0

以上是不很清晰可辨。国际海事组织,它应该转移到问题部分。 – Ceki

+0

感谢您的提示。我更新了问题 – Kayser

6

我跑到这的IntelliJ,并通过添加固定它下面我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

更好的解决方法是使用'dependencyManagement'元素来指定'slf4j-api'的版本 –

+0

我使用的是spring boot 15.这个解决方案适用于我 –

相关问题