环境
我已成功在我的应用程序中实现了log4j
。我使用了以下模式loayout:
{"a":"%X{Id}","b":"%d","message":"%m","priority":"%p","Exception":"%ex"}
它使用我的自定义属性以json格式记录。
但是在使用%ex记录异常时,它正在打印整个跟踪,我想要它,但它打破了json格式。
问题
那么请你建议我把整个堆栈跟踪放在json中而不会破坏。
答案 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