如何在不破坏log4j2的情况下记录Json对象中的异常堆栈跟踪

时间:2016-01-06 14:00:22

标签: java json log4j2 splunk

环境

我已成功在我的应用程序中实现了log4j。我使用了以下模式loayout:

{"a":"%X{Id}","b":"%d","message":"%m","priority":"%p","Exception":"%ex"}

它使用我的自定义属性以json格式记录。

但是在使用%ex记录异常时,它正在打印整个跟踪,我想要它,但它打破了json格式。

问题

那么请你建议我把整个堆栈跟踪放在json中而不会破坏。

4 个答案:

答案 0 :(得分:1)

在log4j Patternlayout配置中,您可以使用分别%enc{%ex}{CRLF}\n替换\r\\n的{​​{1}}。

适用于您的样本:

\\r

https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout

答案 1 :(得分:0)

StrackTrace包含新行chars ..这可能打破了JSON ......为什么不使用getMessage()代替。

答案 2 :(得分:0)

您可以像这样使用JSON库:

JSONObject object = new JSONObject();

object.put("ID", idVariable);
object.put("Exception", exceptionVariable);
object.put("Priority", priorityVariable);

object.toString();

或使用:

object.toString(2);

缩进(漂亮的印刷品)

然后,您可以使用该对象将其传递给Log4j记录器的方法

这里找到的JSON库JSON Library

答案 3 :(得分:0)

这可以使用 JSON 编码格式 %enc{%ex}{JSON} 代替 %ex 来实现。

您的图案布局将如下所示:

{"a":"%X{Id}","b":"%d","message":"%m","priority":"%p","Exception":"%enc{%ex}{JSON}"}

来源:https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout