【问题标题】:log4j2 Modify stacktrace formatlog4j2 修改stacktrace格式
【发布时间】:2017-11-15 10:15:23
【问题描述】:

是否可以配置 log4j2,使堆栈跟踪不显示源代码,也可能不显示行号?
如果您想知道我为什么要这样做,我需要它来进行单元测试,这需要测试是否正确记录了异常。因此,例如,如果 JRE 版本与我复制原始堆栈跟踪的版本不同,则测试失败。因此,如果源代码不包含在堆栈跟踪中,则版本独立性会更高。

例子:

当前堆栈跟踪中的一行如下所示:

    at java.lang.Object.wait(Object.java:502) ~[?:1.8.0_144]

我希望它看起来像这样(但仅适用于 log4j2):

    at java.lang.Object.wait(Object.java:502)

甚至可能是这样:

    at java.lang.Object.wait(Object.java)

甚至更短:

    at java.lang.Object.wait

(任何缩短的版本都是可以接受的。因为目前只有来源(例如~[?:1.8.0_144] vs ~[?:1.8.0_151])不同。)

更新:

我刚刚在官方文档中找到了这个:https://logging.apache.org/log4j/2.x/manual/layouts.html#Patterns 我认为使用%ex{full} 应该是我想要的。将测试它。

还有其他几种可用的格式。

【问题讨论】:

  • 我不确定您的确切要求是什么,但我认为只要您测试异常类名称和消息以及堆栈跟踪项的基本格式就足够了。如果您关心的只是异常已与其跟踪一起记录,我不确定您为什么要比较整个堆栈跟踪。

标签: java log4j2 stack-trace


【解决方案1】:

为了达到想要的效果,需要改变模式。

例如,如果是

... %msg%n

应该是的

... %msg%n%ex{full}

(阅读https://logging.apache.org/log4j/2.x/manual/layouts.html#Patterns了解更多信息)

【讨论】:

    【解决方案2】:

    我认为这是不可能的。 stacktrace 来自 JVM,log4j 只是打印给定的任何内容。

    【讨论】:

    • 我的意思是它一定是可能的。单元测试报告中的堆栈跟踪从不包含 ~[?:1.8.0_144] 部分。
    • 单元测试报告中的堆栈跟踪不是通过 log4j 来的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-17
    • 1970-01-01
    • 2022-07-07
    • 2014-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多