【问题标题】:Separate log file for each war deployed to Jetty部署到 Jetty 的每个战争的单独日志文件
【发布时间】:2012-12-26 15:15:27
【问题描述】:

我有一个打包为 war 文件的 Web 应用程序,它使用 slf4j 作为日志记录外观。它依赖于slf4j-api-*.jar,但内部不包含一个。我想将这场战争部署到 Jetty 并在 Web 容器端配置日志记录。
我已将slf4j-api-*.jarlogback-classic-*.jarlogback-core-*.jar 放入${jetty.home}/lib/extlogback.xml 放入${jetty.home}/resources,我将其配置为将日志写入${jetty.home}/logs/jetty.log
这非常有效,但我已将所有内容都记录到jetty.log。我想将每个战争日志和码头自己的日志写入单独的文件。

  1. 日志框架无关紧要,如果有帮助,我可以使用与 logback 不同的东西。
  2. 我已经阅读了 logback 文档中的“日志分离”一章。这迫使我更改 web.xml 并将 logback jar 添加到战争中,所以这不是我想要的。
  3. 我已经阅读了“Jetty/Tutorial/Sifting Logs with Logback”。它是按热名称而不是按应用程序分隔,所以它也无济于事。

【问题讨论】:

    标签: logging jetty war slf4j logback


    【解决方案1】:

    在文档Sifting Logs with LogBack 中,该示例使用slf4j MDC 将“主机”设置为拆分。您可以对自己的MDCHandler 使用任何您想要的拆分选项。

    由于关键是使用 MDCHandler,它必须能够挖掘传入请求对象中存在的任何信息。 (原因是 MDCHandler 不是 webapp 本身的 servlet 范围和上下文的参与者,因为它位于它的前面)

    一种技术是使用request.getContextPath() 来拆分您的 web 应用已部署到的任何上下文。

    【讨论】:

    • 突然 request.getContextPath() 对于我的请求为空。我已经使用 <Set name="contextPath">/context</Set> 行放置在上下文目录中的上下文文件配置了我的应用程序。看起来我试图在我的 HttpServletRequest 传递给相应的 ContextHandler 之前获取 contextPath。有什么想法吗?
    猜你喜欢
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 2014-08-20
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多