我正在构建我的maven项目并在jetty服务器中部署,我遇到了这个问题。在我的$ {jetty_home} / lib中,我有jcl-over-slf4j-1.7.2.jar,jul-to-slf4j-1.7.2.jar,slf4j-api-1.7.2.jar。和我的maven项目一起,我有
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.2</version>
<scope>provided</scope>
</dependency>
在mvn依赖关系树中,对于slf4j,我看到以下内容:
[INFO] +- org.slf4j:slf4j-log4j12:jar:1.7.2:compile
[INFO] | \- log4j:log4j:jar:1.2.17:compile
[INFO] +- org.slf4j:slf4j-api:jar:1.7.2:provided (scope not updated to compile)
除此之外,我将commons-logging-1.2.jar与我的项目捆绑在一起。现在我构建我的maven项目,如果我使用我的eclipse jetty插件运行它,我没有任何问题,完美的一切都工作正常。 之后,我尝试在jetty webapp文件夹中的远程服务器中部署它,现在我得到了,
Establishing start.log on Wed Jul 08 12:46:13 PDT 2015
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.
我按照其他帖子中提到的步骤进行了此操作,但仍无法解决此问题。请帮忙。感谢。
答案 0 :(得分:2)
您已将SLF API放入错误的类加载器中。
类加载器层次结构看起来像这样(可能有点不准确):
BootstrapClassLoader - loads Java classes
^
|
ExtClassLoader - loads some additional libs
^
|
AppClassLoader - loads Jetty and slf4j-api
^
|
WebAppClassLoader - loads your application and can load slf4j-impl
您的类会触发加载slf4j-api包,从而导致从WebAppClassLoader
到AppClassLoader
的委派。然后slf4j-api类将尝试加载slf4j-impl类,但只会询问AppClassLoader
。此类加载器无法委托给您的应用程序类加载器(即图中的委托)。它只会代理并找不到任何内容,因此错误。
您必须将这些库放在同一个类加载器中。在jetty / lib或WAR中。