【问题标题】:Java error stack trace duplicate after a JsonLayout recordJsonLayout 记录后的 Java 错误堆栈跟踪重复
【发布时间】:2018-11-09 01:45:17
【问题描述】:

Java 应用在 k8s 容器中运行,并使用下一个 appender 将日志消息写入 stdout:

<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <JsonLayout compact="true" eventEol="true" />
    </Console>
</Appenders> 

被fluentd收集并转移到ELK。

我不是 Java 开发人员,但我想知道在正常的 log4j2 日志记录之后,我是否可以以某种方式摆脱标准输出中的 Java 堆栈跟踪 Exception in thread "main" ...,在 JSON 中包含相同的消息。

【问题讨论】:

  • 我认为Exception in thread "main" ... 消息是在应用程序中引发异常并且未在应用程序中捕获时出现的。在这种情况下,应用程序将停止。你说的是这个场景吗?或者你能分享更多你想要删除的细节吗?
  • 是的,我的意思是java进程因某些错误而失败并关闭的场景。在这种情况下,它会在 JsonLayout 中打印一行错误,并在其后打印堆栈跟踪。
  • 捕获异常并根据需要进行处理。如果您提供Minimal, Complete, and Verifiable Example,您会得到更好的建议
  • @D.B.正如我所说,我不是 Java 开发人员,所以我不能自己用代码做任何事情,也许只是编辑 XML 或通过复制粘贴添加一些代码示例。不过还是谢谢你的建议。

标签: java elasticsearch kubernetes log4j2


【解决方案1】:

试试下面的配置-

<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <JsonLayout compact="true" eventEol="true" includeStacktrace="false" />
    </Console>
</Appenders>

对于includeStacktrace=false,只会记录Throwable 的类名和消息。不会记录异常的完整堆栈跟踪。查看更多详情here

【讨论】:

  • 谢谢你的建议,伙计,但它似乎只会从 json 日志条目中删除堆栈跟踪。此外,它不允许我使用此选项:ERROR JsonLayout contains an invalid element or attribute "includeStacktrace"
  • @cardinal-gray 我在上面的答案中添加了详细信息和参考链接。如果您收到此属性的错误,则您的 log4j2 似乎是旧版本
  • 你是对的,那是在2.3 log4j 版本上。尽管如此,它仍会在出现 JSON 格式错误后继续打印完整的非 JSON 堆栈跟踪。虽然 JSON 格式的行不包含完整的堆栈跟踪消息(如 at ... (Connection.java:287))。
猜你喜欢
  • 2010-12-29
  • 2021-06-07
  • 2014-11-01
  • 1970-01-01
  • 2018-09-19
  • 1970-01-01
  • 2011-04-06
  • 1970-01-01
  • 2016-05-16
相关资源
最近更新 更多