但有的时候,需要对日志进行统计分析,尤其是增加了自定义的输出参数,此时不方便对文本数据进行解析,
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格式日志,非常简单:只需要将<PatternLayout /> 改为<JsonLayout /> 即可,如下图:打印出的日志,格式如下:...
以
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依赖:
<!-- https://mvnrepository.com/artifact/net.logstash.
log4j
/
json
event-
layout
-->
<dependency>
<groupId>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
的标准
日志
格式
的一种示例,你可以根据自己的需要自定义
日志
格式
。