2013-02-03 57 views
3

我瞭解如何使java.util.logging中的日誌和系統(出|錯誤)輸出通過管道輸送到SLF4J:如何合併java.util.logging,System。(out | err)和Jetty日誌記錄?

但它需要一些jar /類和代碼在碼頭啓動時執行。基本上是這樣的:

SLF4JBridgeHandler.install() // to pipe j.u.l SysOutOverSLF4J.sendSystemOutAndErrToSLF4J() // to pipe System.(out|err)

我知道如何獲得所需的瓶/類添加到碼頭(剛加入SYSOUT-過slf4j.jar和07月到slf4j.jar至$ JETTY_HOME/lib目錄/ ext),但是我不知道如何在服務器啓動中運行代碼,以便jetty將統一輸出(sysout和jul)配置爲slf4j。我可以爲每個webapp運行該代碼,但爲了使事情正確,它應該由jetty完成,而不是由每個需要此行爲的webapp完成。

這應該以不同的方式完成嗎?有沒有非voodo的方式來做到這一點?

請你的答案是碼頭的版本> = 8

回答

1

我不知道這是否會工作,但你試過了嗎?

public class MyWebappServlet ... { 
    static { 
    // to pipe j.u.l 
    SLF4JBridgeHandler.install(); 

    // to pipe System.(out|err) 
    SysOutOverSLF4J.sendSystemOutAndErrToSLF4J(); 
    } 
    ... 

而在你web.xml

<servlet> 
    <servlet-name>MyWebapp</servlet-name> 
    <servlet-class>MyWebappServlet</servlet-class> 
</servlet> 

它可能無法攔截一切從一開始,但是一旦碼頭裝載您的MyWebappServlet類的記錄應該被重定向。

否則,您需要自定義您的Jetty與這兩行。

UPDATE: 還有另外一個辦法 - 使用main()包裝像BCEL啓動碼頭,但這些記錄重定向已經完成之後。

在這種情況下,命令行是這樣的:

java my.custom.JavaWrapper org.eclipse.jetty.start.Main [arguments] 

如果能夠在jetty.sh可以做到,那麼這將適用於該服務器實例的所有Web應用程序。