但有的时候,需要对日志进行统计分析,尤其是增加了自定义的输出参数,此时不方便对文本数据进行解析,

json格式就派上了用场。

修改log4j配置以支持输入json格式日志,非常简单:只需要将 <PatternLayout /> 改为 <JsonLayout /> 即可,如下图:

打印出的日志,格式如下:

继而提出更高的需求,比如:将日志打印在一行中,输出自定义参数(即ThreadContext线程数据),打印报错代码定位,格式化时间字段,诸如此类。

JsonLayout 标签本身是log4j包中的一个类,里面有一些属性,可以进行设置,

compact 设置是否紧凑输出(即将日志输出到一行);

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类型(毫秒数),不便于查看日志,

未找到配置,修改时间的输出格式。

(此问题待解决)

总所周知,默认的log4j,采用 文本方式输出日志。但有的时候,需要对日志进行统计分析,尤其是增加了自定义的输出参数,此时不方便对文本数据进行解析,json格式就派上了用场。修改log4j配置以支持输入json格式日志,非常简单:只需要将&lt;PatternLayout /&gt; 改为&lt;JsonLayout /&gt; 即可,如下图:打印出的日志,格式如下:...
json 格式 输出 应用程序 日志 作者:史蒂夫·里格比 该项目提供了 Alfresco、Share 和 Solr 日志 json 格式 输出 的功能,以便 ELK 使用。 附加组件打包为 AMP 文件,以便于安装。 构建:检查项目,然后压缩 log4j - json 目录。 将生成的 .zip 文件重命名为 .amp。 使用 amp 部署过程部署到 war 文件 - 请参阅: : 修改您的 log4j 属性文件以包含 json appender,例如:注意,${logfilename} 应替换为文件名和路径。 log4j .appender. Json =org.apache. log4j .FileAppender log4j .appender. Json .File=${logfilename}. json log4j .appender. Json . layout =net.logstash.
由于配置中使用了 json 格式 日志 输出 ,所以需要引入如下依赖 "net.logstash.logback:logstash-logback-encoder:4.11", <!-- https://mvnrepository.com/artifact/net.log...
文章目录方案1:基本解决方案2:完美解决小结 最近项目中遇到 log4j 日志 要改成 json 格式 ,方便引入ELK进行查询 日志 。 在网上找了一个方法几个方法都不太好用,这个是个改造项目,原来的限制比较多。例如只能使用xml 格式 配置。尝试了多种方法之后,终于让我发现一个可以完美解决的方案。 方案1:基本解决 在 log4j .xml中添加< Json Layout />标签,这个标签可以基本可以实现把 日志 转为 json ,这个也是网上普遍转载的方案,但是存在一个缺陷,就是时间戳是long类型,网上找了很多资料基本不能
在 Java 中,可以使用 JSON 日志 记录器来实现 日志 打印成 JSON 格式 。 例如,可以使用开源项目 log4j - json event- layout 来实现此功能。该项目提供了一种叫做 JSON Event Layout 的布局,可以让 log4j 在打印 日志 时使用 JSON 格式 。 使用方法如下: 在项目中添加 log4j - json event- layout 的依赖。 在 log4j 配置文件...
文章目录1. pom依赖1.1 替换 日志 依赖1.2 项目需要Jackson包,保证项目中包含jackson的依赖2. 修改代码2.1 打印pv 日志 类2.1.1 修改配置文件2.1.2 修改 输出 代码2.2 打印业务 日志 2.3 打印error 日志 3. 附录代码附录1: 输出 项目名称附录2:重写 Log4j LogEvent源码附录3:完整的 log4j2 -spring.xml文件4. 推荐阅读 默认情况下SpringBoot2.x采用的是logback打印 日志 ,而 log4j2 性能优于logback。 默认情况下log
最近公司打算使用ELK平台,需要将 json 格式 的log打印到指定目录,使用Filebeat来采集 日志 。 先在maven里面引入下面的pom依赖: &lt;!-- https://mvnrepository.com/artifact/net.logstash. log4j / json event- layout --&gt; &lt;dependency&gt; &lt;groupId&gt;net...
需求:现在有需要把每月的定时任务的 日志 信息(INFO级别的)打印到自定义的emailAccount.log文件中;这个跑批类 日志 信息需要跟其他文件中INFO区分开来(也就是说emailAccount.log文件不能有别的文件的INFO级别的信息)。自己有这个需求,就去网上下了下资料,现在来记录一下。 1.首先需要配置自己自定义文件的 log4j 的相关设置如下: ###############
json .overwrite_keys: true # 默认情况下,解码后的 JSON 位于 输出 文档中的“ json ”键下。如果启用此设置,则键将在 输出 文档中的顶层复制。默认值为 false # 如果启用了此设置,则解码的 JSON 对象中的值将覆盖 Filebeat 在发 %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n 其中,%d表示日期时间,%t表示线程名,%-5level表示 日志 级别,%logger{36}表示 日志 记录器的名称,%msg表示 日志 消息,%n表示换行符。 例如,一条符合这个 格式 日志 记录可能如下所示: 2022-12-28 15:34:56.789 [main] ERROR com.example.MyClass - This is an error message. 这条 日志 记录表示,在2022年12月28日15:34:56.789,在主线程中,com.example.MyClass这个类记录了一条错误级别的 日志 日志 消息为“This is an error message.”。 注意,这只是 log4j2 的标准 日志 格式 的一种示例,你可以根据自己的需要自定义 日志 格式