log4j2中Pattern Layout 对消息体转义
最近做一个功能,需要将程序中输出的消息体进行转义处理。
功能简介:收集每一行日志,存储的ES中,用于别的使用目的。收集每一行日志,就需要在log4j中拼成固定的json格式,方便另一个服务进行内容读取和解析。
遇到的问题:程序中通过log.info(message)输出的消息千奇百怪,存在一部分message就包含一个完整的json格式,这就破坏了外层拼装的json格式。所以需要对msg进行转义处理。
解决方案
利用Pattern Layout 提供的标签:enc
enc可以处理4中格式的转义:{[HTML|XML|JSON|CRLF]},默认进行HTML转义。
示例:
默认处理,进行HTML格式转义
%enc{%m}
对其他类型转义处理,如JSON
%enc{%m}{JSON}
使用场景: {“message”: “%enc{%m}{JSON}”}
如需动态替换,可以借助log4的MDC
MDC key
%enc{%mdc{key}}
CLC