2012-12-26 113 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。 任何想法? –