gpt4 book ai didi

java - 修剪 Log4J 消息

转载 作者:搜寻专家 更新时间:2023-10-31 19:51:22 24 4
gpt4 key购买 nike

我有一个 appender,我只希望显示消息的前 X 个字符(对于本例,我们假设为 5 个字符)。

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

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

The quick brown fox

我只是想看看:

The q

当我在模式中使用它时

%.5m

我明白了

n fox

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

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

最佳答案

默认情况下从消息的开头截断(不同于 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。

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

关于java - 修剪 Log4J 消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/417216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com