2009-01-06 67 views
5

我有一個appender,我只想要顯示的消息的前X個字符(對於這個例子,我們會說5)。修剪Log4J消息

我正在使用PatternLayout,但無法正確截斷消息。

例如,如果我的日誌信息是

敏捷的棕色狐狸

我只是想看看:

將q

當我在模式

中使用此功能

%0.5米

我得到

ň狐狸

,因爲那些都是過去的5個字符。

我看了看PattenLayout javadoc,但找不到任何東西。我知道這不奇怪,不想看到整個消息,但對於這個特定的appender它是有道理的。我在不同的appender中記錄整個消息。如果可能,我想避免編寫自定義類。

回答

6

默認情況下,從消息的開始處截斷(與C中的printf不同,它從末尾開始)。

正確的模式應該是:

%.-5m 

編輯:

我只是嘗試這樣做,和log4j的不喜歡這種模式。但是,如果您可以切換,則提供的模式在LOGBack中可以正常工作。如果您無法切換日誌提供程序,則可以對log4j進行一次性修改。代碼的有趣的一點出現在線路org.apache.log4j.helpers.PatternConverter 75-76:

if(len > max) 
    sbuf.append(s.substring(len-max)); 

這應該閱讀:

if(len > max) 
    sbuf.append(s.substring(0,max)); 

您可以簡單地修改和重新編譯的jar供您使用,或者您可以繼承PatternConverter以執行正確的截斷。這還需要一個新版本的PatternLayout,它包含createPatternParser方法,您需要在子類中重寫以實例化您的新版本的PatternConverter。

作爲一個方面說明,請注意在特定項目中修改開源代碼的許可後果。