Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SLF4J的NoSuchMethodError_Java_Spring_Log4j_Slf4j - Fatal编程技术网

Java SLF4J的NoSuchMethodError

Java SLF4J的NoSuchMethodError,java,spring,log4j,slf4j,Java,Spring,Log4j,Slf4j,我正在尝试使用sfl4j和log4j在Spring中构建一个应用程序。我阅读并完成了所有关于从spring上下文中删除commons日志的说明。然而,我不断得到同样的错误: SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListenerjava.lang.NoSuchMethodError:

我正在尝试使用sfl4j和log4j在Spring中构建一个应用程序。我阅读并完成了所有关于从spring上下文中删除commons日志的说明。然而,我不断得到同样的错误:

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListenerjava.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;Ljava/lang/Throwable;)V
    at org.apache.commons.logging.impl.SLF4JLocationAwareLog.info(SLF4JLocationAwareLog.java:159)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:273)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:111)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4791)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5285)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:657)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:536)
    at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1462)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:301)
    at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
    at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:792)
    at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1445)
    at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:860)
    at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:357)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
以下是我的pom.xml:

`


org.springframework
SpringWebMVC
${spring.version}
org.springframework
spring上下文
${spring.version}
公用记录
公用记录
javax.servlet
jstl
1.1.2
塔格利布
标准
1.1.2
爪哇
javaeewebapi
6
假如
org.hibernate
冬眠核心
4.2.2.最终版本
net.sf.jasperreports
jasperreports
5.1.0
公用记录
公用记录
org.apache.tiles
瓷砖api
3.0.1
org.apache.velocity
速度
1.7
org.springframework
德克萨斯州春季
${spring.version}
org.hibernate
休眠验证器
5.0.1.最终版本
org.springframework
spring上下文支持
${spring.version}
朱尼特
朱尼特
4.11
org.mockito
莫基托所有
1.9.5
org.springframework
弹簧试验
${spring.version}
org.springframework
SpringJDBC
${spring.version}
org.springframework
春季甲虫
${spring.version}
paypal.payflow
payflow sdk
4.31
org.slf4j
jcl-over-slf4j
${slf4jVersion}
org.slf4j
slf4j-log4j12
${slf4jVersion}
`

有人能帮忙吗?我花了好几天的时间想弄明白这一点

解决此问题的最佳方法是为log4j库和研究调用链接包含源文件

  • 确保log4j和jcl-over-slf4j成功部署在Tomcat上
  • 使用和分析问题根源并解决版本兼容性问题
  • 确保类路径中没有冲突。使用下一个代码段确保从库JAR加载了类:
例如:

    Class klass = String.class;
    URL location = klass.getResource('/'+klass.getName().replace('.', '/')+".class");
将打印此类型的字符串:

    jar:file:/Users/taky/.gradle/caches/artifacts-14/filestore/com.google.inject/guice/3.0/jar/9d84f15fe35e2c716a02979fb62f50a29f38aefa/guice-3.0.jar!/com/google/inject/internal/InjectorImpl.class

您缺少slf4j api的依赖项:

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

org.slf4j

以下是将slf4j与logback一起使用的完整配置:

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>log4j-over-slf4j</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jul-to-slf4j</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.0.6</version>
    </dependency>

org.slf4j
slf4j api
${slf4j.version}
org.slf4j
log4j-over-slf4j
${slf4j.version}
org.slf4j
jcl-over-slf4j
${slf4j.version}
org.slf4j
七月至六月
${slf4j.version}
回写
回归经典
1.0.6
最后,您需要将其添加到logback.xml中,以便通过slf4j引导jul:

<!-- support for jul through logback: http://logback.qos.ch/manual/configuration.html#LevelChangePropagator -->
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"/>

@Solubris,
你给了我正确的指示。根据我对你帖子的回复,它最初没有起作用,因为我没有删除任何仍在lib文件夹中的slf4j.version的相关旧jar。因此,当我删除所有那些重复的库时,web应用程序部署得很好


对于遇到相同问题的任何人,请遵循Solubris解决方案,然后。。。确保检查您的lib文件夹,并删除所有与slf4j相关且版本较旧的jar。我希望这可以节省一些人无数个小时的困惑和转向疯狂

我在/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/ex中找到了以下文件 slf4j-api-1.5.6.jar
slf4j-log4j12-1.5.6.jar


因此,我删除了这些,而代之以maven在存储库中安装的(…/.m2/存储库),从而解决了问题。

这不是您当前的问题,但您应该将
test
添加到junit依赖项中。您能否检查您是否对具有运行时范围的
log4j
和具有编译范围的
slf4j api
具有可传递依赖关系?log4j和slf4j api都具有编译范围。我尝试将这些更改为运行时,但当我在spring上下文依赖项上更改为此范围时,使用该依赖项的类抛出错误,因此我将所有内容留给编译;如果您和库编写人员都遵守了规则,那么在运行时只需要log4j。那我就不知道了<代码>junit
几乎应该始终是测试范围,但是,这无助于解决您的主要问题。您使用哪一个${slf4jVersion}?这似乎是依赖项不匹配的问题。请提供所有主要JAR的版本,如spring和hibernate。你正在使用哪台服务器?我完全按照你说的做了,但同样的错误仍然存在。我将依赖项添加到pom中,并创建了logback-xml和logback-access.xml文件,但相同的错误仍然存在。我不知道该怎么办了。如果你的pom中有正确的依赖项,那么它们一定不会进入你的应用程序。如何运行应用程序?两个jar都已成功部署在tomcat上,并且都使用相同的slf4j.version属性变量。所以,我不知道为什么这个问题持续存在。我会继续研究的。
<!-- support for jul through logback: http://logback.qos.ch/manual/configuration.html#LevelChangePropagator -->
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"/>