当前位置:  开发笔记 > 编程语言 > 正文

修剪Log4J消息

如何解决《修剪Log4J消息》经验,为你挑选了1个好方法。

我有一个appender,我只想要显示的消息的前X个字符(例如,我们会说5个).

我正在使用PatternLayout但我无法获取正确截断消息的消息.

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

快速的棕色狐狸

我只是想看看:

q

当我在模式中使用它

%0.5米

我明白了

n狐狸

因为那些是最后5个字符.

我看过PattenLayout javadoc,但找不到任何东西.我知道这有点奇怪,不想看到整个消息,但对于这个特定的appender它是有道理的.我将整个消息记录在另一个appender中.如果可能的话,我想避免编写自定义类.



1> James Van Hu..:

默认情况下,截断是从消息的开头完成的(与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.

作为旁注,请注意在特定项目中修改开源代码的许可后果.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有