2009-01-06 70 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。

作为一个方面说明,请注意在特定项目中修改开源代码的许可后果。