2010-10-21 87 views
1

我正在使用jetty6與SLF4J和java日誌記錄,並一直試圖添加一個自定義日誌格式化程序,但無論我嘗試我似乎無法得到它的工作。Jetty6 slf4j日誌記錄 - 如何讓自定義日誌格式化工作?

我有一個格式化,像這樣:

package mycode.logging; 
public class DeadSimpleFormatter extends SimpleFormatter 
{ 
    // Nothing here at all - just an empty subclass of SimpleFormatter. 
} 

我想用這個作爲默認爲我的碼頭記錄,所以我創建了一個$ {} jetty.home /resources/logging.properties file:

handlers=java.util.logging.FileHandler 
.level=INFO 
java.util.logging.FileHandler.pattern=logs/test_%u.%g.log 
java.util.logging.FileHandler.limit=90000 
java.util.logging.FileHandler.count=20 
java.util.logging.FileHandler.formatter=mycode.logging.DeadSimpleFormatter 

mycode.level=INFO 

我創建了一個jar文件logging.jar,其中包含了DeadSimpleFormatter類。我把這個jar放到$ {jetty.home}/lib/ext中。

我開始碼頭:

java -Djava.util.logging.config.file=resources/logging.properties 
    -jar start.jar etc/jetty-logging.xml etc/jetty.xml 

我可以看到所創建的輸出文件。它遵循我的屬性文件中定義的限制和計數規則。但它不使用我的格式化程序 - 它將恢復爲默認的XmlFormatter。我沒有看到stdout或stderr出錯。

如果我改變logging.properties文件來設置這樣的格式:

java.util.logging.FileHandlerformatter=java.util.logging.SimpleFormatter 

...那麼它的工作原理 - 日誌文件被寫入了使用正常SimpleFormatter。所以我相信,我的物業是好的,我有我的slfj罐等所有正確的。只是Jetty不喜歡我的DeadSimpleFormatter。

由於沒有什麼 - 字面意思! - 在DeadSimpleFormatter中,我認爲這可能是一個類加載問題。我試過這樣明確地添加jar文件:

java -Djetty.class.path=/mypathtojettyhome/lib/ext/logging.jar 
    -Djava.util.logging.config.file=resources/logging.properties -jar start.jar 
    etc/jetty-logging.xml etc/jetty.xml 

......但沒有快樂。

我把主要方法爲我DeadSimpleFormatter和檢查,我可以運行jar:

java -jar lib/ext/logging.jar 

...這工作,所以我敢肯定我的罐子就可以了。

有沒有人有任何想法這裏發生了什麼?我嘗試了所有我能想到的組合。

感謝, 阿拉斯泰爾

+0

Alastair,你有沒有得到這個工作?我在Tomcat 7上遇到了同樣的問題。我添加了無參數的默認構造函數,但仍然無法使其工作。和你一樣,屬性文件中的所有OTHER屬性都得到了尊重,但沒有指向我的自定義impl的formatter屬性。 – 2011-10-29 23:36:25

回答

0

對於自定義格式從配置工作,它應該是公開的,並有公共無參cunstructor。由於java.util.logging.LogManager嘗試通過反射機制初始化此格式化程序,如果失敗,它使用默認的格式化程序。

0

Alastair,不知道你是否有這個工作,但我相信我有同樣的問題,你和我得到它的工作。您可以看到我的問題和答案here,但其要點是:

在將lib或lib/ext文件夾添加到類路徑並加載自定義類之前,將會加載java日誌記錄。我需要做的是使用與start.jar中主路徑相同的包名(例如org.mortbay.start)創建我的自定義類,然後將編譯後的.class文件從其中添加到該路徑中start.jar直接在我的logging.properties中設置爲使用org.mortbay.start.MyCustomFormatter。