总所周知,默认的log4j,采用 文本方式输出日志。
但有的时候,需要对日志进行统计分析,尤其是增加了自定义的输出参数,此时不方便对文本数据进行解析,
json格式就派上了用场。
修改log4j配置以支持输入json格式日志,非常简单:只需要将 <PatternLayout /> 改为 <JsonLayout /> 即可,如下图:
打印出的日志,格式如下:
继而提出更高的需求,比如:将日志打印在一行中,输出自定义参数(即ThreadContext线程数据),打印报错代码定位,格式化时间字段,诸如此类。
JsonLayout 标签本身是log4j包中的一个类,里面有一些属性,可以进行设置,
compact 设置是否紧凑输出(即将日志输出到一行);
![](/qrcode.jpg)
eventEol 设置强制换行(否则在compact=true的情况下,日志始终输出在同一行中);
properties 设置打印自定义的线程参数(可参考博文https://blog.csdn.net/wangjunjun2008/article/details/89393960)
locationInfo 设置打印报错的类名、方法名、所属行数(这个默认竟然不打印,也是很奇怪了);
额外还有一个参数complete 设置是否添加页眉页脚(即在同一个请求中,将打印的日志用中括号([ ])包围),不过本人好奇,在多线程的情况下 ,打印在同一个日志文件中,如何添加页眉页脚呢?(懒得做实验了)。
转载自博文: https://www.cnblogs.com/wenq001/p/10251634.html
还有另外一篇文章供参考:https://stackoverflow.com/questions/41241100/log4j2-jsonlayout-timestamp-pattern
官网文章参考:https://logging.apache.org/log4j/2.x/manual/layouts.html
【遗留问题】
目前还有一个问题没有完美解决:打印的日志中,timeMillis 字段的值为一个Long类型(毫秒数),不便于查看日志,
未找到配置,修改时间的输出格式。
(此问题待解决)