【问题标题】:Trimming the Log4J Message修剪 Log4J 消息
【发布时间】:2010-09-29 20:30:09
【问题描述】:

我有一个附加程序,我只希望显示消息的前 X 个字符(在本例中,我们会说 5)。

我正在使用 PatternLayout,但我无法正确截断消息。

例如,如果我的日志消息是

快速的棕色狐狸

我只是想看看:

q

当我在 Pattern 中使用它时

%.5m

我明白了

狐狸

因为这些是最后 5 个字符。

我查看了PattenLayout javadoc,但找不到任何东西。我知道不想看到整个消息有点奇怪,但对于这个特定的附加程序来说,这是有道理的。我确实将整个消息记录在不同的附加程序中。如果可能,我想避免编写自定义类。

【问题讨论】:

    标签: java log4j


    【解决方案1】:

    默认情况下从消息的开头进行截断(与 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。

    附带说明,请注意在您的特定项目中修改开源代码的许可后果。

    【讨论】:

      猜你喜欢
      • 2020-06-12
      • 1970-01-01
      • 1970-01-01
      • 2011-03-25
      • 1970-01-01
      • 2021-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多