【问题标题】:Tomcat Logging With Slf4j and Log4jTomcat 使用 Slf4j 和 Log4j 进行日志记录
【发布时间】:2011-11-04 16:30:08
【问题描述】:

我有一个网络应用程序部署到 Tomcat 7 服务器。我的应用程序使用log4j 和file appender。但是,并非所有日志消息都写入文件。

在我的类路径中,我有:

log4j-1.2.14.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar

我的log4j.properties 文件在我的本地机器上运行良好,并且部署正确。

我看到应用程序生成的错误消息被写入catalina.out,而没有写入我的log4j log。 catalina.out 中的日志消息看起来来自其他一些日志框架,因为输出模式的格式与我的log4j 模式不同。我在catalina.log 中看到的日志记录如下:

Nov 4, 2011 11:05:31 AM org.apache.myfaces.shared_impl.util.StateUtils reconstruct
SEVERE

而我的 log4j 模式是这样的:

2011-11-03 16:42:09,336 ["http-bio-8080"-exec-13] ERROR

我的log4j 文件日志中出现了一些日志记录,但不是全部。从我读过的内容来看,slf4j 只需要这些罐子就可以汇集日志输出。有什么想法吗?

【问题讨论】:

  • 您可以尝试使用名为“log4j-over-slf4j-1.6.1.jar”的 slf4j jar,而不是名为“log4j-1.2.14.jar”的 log4j jar
  • log4j-over-slf4j.jar 是 log4j 的替代品。提问者不想替换 log4j。 DwB,我建议您删除您的评论,因为它具有误导性。

标签: java tomcat log4j slf4j


【解决方案1】:

看起来StateUtils 类正在使用 java.util.logging (jul)。按理说其他 myfaces 类也使用 jul。因此,您可能希望通过 SLF4J 汇集 jul 日志。看看bridging legacy APIs,尤其是jul-to-slf4j 桥。

安装jul-to-slf4j时请查看SLF4JBridgeHandler javadocs的使用说明。

【讨论】:

  • 我尝试一次包含一个 jul-to-slf4j 和 jcl-over-slf4j 依赖项,但没有发生任何事情,仍然看不到 myfaces 的日志。我的应用程序其余部分的日志通过 SL4J 成功路由到 logback 并写入文件和 netbeans 控制台,但看不到 myfaces 日志。你有什么建议吗?
  • 安装 jul-to-slf4j 时请参阅 SLF4JBridgeHandler javadocs 以获取使用说明。
  • 感谢您的建议,我在正确安装 SLF4JBridgeHandler 后尝试过,它工作正常!然而,使用LevelChangePropagator 使用更高效的方法并没有成功。然而,这是一个不同的问题。无论如何谢谢。在第一种情况下,我为每个日志收到 2 条消息(即,像这样:) INFO j.e.s.s.c.s.e.server.logging -> INFO o.a.m.webapp.WebConfigParamsLogger -> No context init parameter ... found. INFO o.a.m.webapp.WebConfigParamsLogger -> No context init parameter ... found
  • 你能解释一下为什么 Myfaces 不允许灵活地插入你想要的日志实现而不是使用 JUL/Commons 日志吗?!
  • “为什么”问题只能由 Myfaces 设计师自己回答。请注意,commons-logging 已经很老了,我宁愿让框架设计人员实际使用 SLF4J。
【解决方案2】:

尝试将 jcl-over-slf4j 作为依赖项。 myfaces 可能正在使用 commons-logging。

查看 slf4j 文档:http://www.slf4j.org/legacy.html#jcl-over-slf4j

【讨论】:

  • 啊,不是 commons-logging,而是 java util logging,请参阅 ceki 的回答
【解决方案3】:

根据http://adfinmunich.blogspot.de/2012/03/how-to-configure-tomcat-to-use-slf4j.html 中描述的步骤配置您的tomcat 服务器。这篇博文描述了如何用 slf4j 替换 java.util.logging(在外观后面使用 log4j)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2018-01-07
    • 1970-01-01
    • 2018-10-07
    • 2018-11-16
    • 1970-01-01
    相关资源
    最近更新 更多