2012-12-26 75 views
2

我有一个Web应用程序打包为war文件,它使用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。我想写每个战争日志和码头自己的日志分开文件。部署到Jetty的每场战争的单独日志文件

  1. 记录框架并不重要,如果有帮助,我可以使用与logback不同的内容。
  2. 我已经阅读了logback文档中的“Logging Separation”一章。这迫使我改变我的web.xml并将logback jar添加到war中,所以这不是,我想要的。
  3. 我已经阅读“码头/教程/筛选日志与Logback”。它是关于通过hotstname而不是通过应用程序分离的,所以它也没有帮助。

回答

1

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

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

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

+0

Suddenly request.getContextPath()对我的请求为空。我用'/context'行配置了我的应用程序,上下文文件放置在上下文目录中。 看起来我想在我的HttpServletRequest传递给相应的ContextHandler之前获取contextPath。 任何想法? –