【问题标题】:Handler error in SLF4JBridgeHandler in tomcat logstomcat 日志中 SLF4JBridgeHandler 中的处理程序错误
【发布时间】:2013-05-04 13:54:53
【问题描述】:

我的 tomcat 日志目前混合了不同格式的日志消息。所以我正在尝试使用 JUL-to-SLF4J 桥来设置 SLF4J。

我最初收到类似的日志消息

2013 年 5 月 23 日晚上 7:57:17 org.apache.catalina.core.StandardService startInternal
信息:启动服务 Catalina
2013 年 5 月 23 日晚上 7:57:17 org.apache.catalina.core.StandardEngine startInternal
信息:启动 Servlet 引擎:Apache Tomcat/7.0.29
2013-05-23 19:57:47,224 [localhost-startStop-1] 从类路径资源 [META-INF/cxf/cxf.xml] 加载 XML bean 定义
2013-05-23 19:57:47,246 [localhost-startStop-1] 从类路径资源 [META-INF/cxf/cxf-servlet.xml] 加载 XML bean 定义

我从这里关注了一个博客.. http://hwellmann.blogspot.com/2012/11/logging-with-slf4j-and-logback-in.html

我正在为 SLF4J 使用以下 jar: 7 月到 slf4j-1.7.5.jar, slf4j-api-1.7.5.jar

在 logging.properties 中

handlers = org.slf4j.bridge.SLF4JBridgeHandler

我目前没有收到混合消息,但在启动 tomcat 时。它没有打印 tomcat 格式,但会抛出 Handler error

下面是日志的sn-p

Handler error
java.lang.ClassNotFoundException: org.slf4j.bridge.SLF4JBridgeHandler
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:321)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:266)
    at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:521)
    at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:464)
    at org.apache.juli.ClassLoaderLogManager.readConfiguration(ClassLoaderLogManager.java:288)
    at java.util.logging.LogManager$2.run(LogManager.java:278)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.util.logging.LogManager.readPrimordialConfiguration(LogManager.java:276)
    at java.util.logging.LogManager.getLogManager(LogManager.java:259)
    at java.util.logging.Logger.<init>(Logger.java:245)
    at java.util.logging.LogManager$RootLogger.<init>(LogManager.java:1104)
    at java.util.logging.LogManager$RootLogger.<init>(LogManager.java:1101)
    at java.util.logging.LogManager$1.run(LogManager.java:199)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.util.logging.LogManager.<clinit>(LogManager.java:176)
    at java.util.logging.Logger.getLogger(Logger.java:307)
    at com.sun.jmx.remote.util.ClassLogger.<init>(ClassLogger.java:55)
    at sun.management.jmxremote.ConnectorBootstrap.<clinit>(ConnectorBootstrap.java:739)
    at sun.management.Agent.startAgent(Agent.java:147)
    at sun.management.Agent.startAgent(Agent.java:289)
***startInternal() called
***startInternal() JoranConfigurator

我已经解决这个问题好几天了,尝试了很多组合,但找不到任何运气。

提前致谢!

【问题讨论】:

  • 从那时起很久......但我想我有同样的问题。我的错误是我在 /lib 而不是 /bin 中复制了额外的 jar。确保将它们复制到 /bin 中,并且 setenv.sh 正在设置正确的 CLASSPATH,如说明中所述。现在可以了!

标签: tomcat logging slf4j logback java.util.logging


【解决方案1】:

只需为 Linux 创建或编辑 CATALINA_HOME/bin/setenv.sh:

CLASSPATH=$CATALINA_HOME/bin/jul-to-slf4j-1.7.5.jar:\  
$CATALINA_HOME/bin/slf4j-api-1.7.5.jar

或用于 Windows 的 CATALINA_HOME\bin\setenv.bat:

set CLASSPATH=%CATALINA_HOME%\bin\jul-to-slf4j-1.7.5.jar;^
%CATALINA_HOME%\bin\slf4j-api-1.7.5.jar

【讨论】:

  • 在我的 ubuntu 服务器上,find / -name setenv.sh 没有返回任何内容
  • 默认情况下不存在 setenv 脚本文件。如果你需要一个,你必须创建它。该脚本放置在 CATALINA_BASE/bin 或 CATALINA_HOME/bin 目录中。例如,在我的 ubuntu 脚本中是 /usr/share/tomcat8/bin/setenv.sh。
  • 有没有人为maven-cargo-plugin嵌入的Tomcat容器提供解决方案?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 2012-03-02
  • 2016-08-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多