JsonLayout log4j2 json格式输出日志

如果日志输出时,想改变日志的输出形式为Json格式,可以在log4j2.xml中使用JsonLayout标签,使日志输出格式为Json格式。

前提需要Jackson的包,保证项目中包含jackson的依赖

然后在log4j2.xml中在需要日志输出的地方,添加

<JsonLayout/>

例如需要在控制台输出格式为Json格式则:

 <!--这个输出控制台的配置-->
<Console name="Console" target="SYSTEM_OUT">
<JsonLayout/>
</Console>

如果需要在日志文件输出,则为:

         <RollingFile name="syswareLog" fileName="${LOG_HOME}/logs/sysware.log"
filePattern="${LOG_HOME}/logs/$${date:yyyy-MM}/sysware-%d{yyyy-MM-dd}-%i.log">
<JsonLayout/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100000 kb"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
<DefaultRolloverStrategy max="100"/>
</RollingFile>

设置完成之后,日志输出格式如下:

{
"timeMillis" : 1547108632526,
"thread" : "main",
"level" : "WARN",
"loggerName" : "com.ctrip.framework.apollo.internals.DefaultMetaServerProvider",
"message" : "Could not find meta server address, because it is not available in neither (1) JVM system property 'apollo.meta', (2) OS env variable 'APOLLO_META' (3) property 'apollo.meta' from server.properties nor (4) property 'apollo.meta' from app.properties",
"endOfBatch" : false,
"loggerFqcn" : "org.apache.logging.slf4j.Log4jLogger",
"threadId" : 1,
"threadPriority" : 5
}

但是这个日志是格式化后的json,有同事提出需求,想让一个json对象输出为一行,这样日志读取的时候,可以以一个对象为单位读取,而不是一行。

继续查看JsonLayout 源码,既然他提供了转换为json,那是不是也可以提供格式化json规则。

org.apache.logging.log4j.core.layout.JsonLayout 。 继承自 AbstractJacksonLayout,在AbstractJacksonLayout 中有下面几个属性介绍。我们下面主要介绍这几个属性的含义及使用方法。

    protected final String eventEol;
protected final ObjectWriter objectWriter;
protected final boolean compact;
protected final boolean complete;
compact 设置是否紧凑输出,默认是false,如果设置为true,则不是用行位和缩进,大概意思是说,输出把所有的日志输出为一行。
     原文( If "true", does not use end-of-lines and indentation, defaults to "false".)
complete 设置是否完成,默认是false, 如果设置为true,则在日志开始和结束会包含页眉和页脚,和逗号。
    原文(If "true", includes the JSON header and footer, and comma between records.)
eventEol 如果为“true”,则在每个日志事件后强制执行EOL(即使compact是“true”),默认是false,即使在紧凑模式下,也会生效,大概意思就是说,
     即使是在紧凑模式下,如果evetEol设置为true ,也会在每个log event(log.info().log.error(),log.debug()等等)之后强制换行输出。
objectWriter 暂不清楚 通过上面的属性介绍,根据需要,只需将compact ,evetEol 设置成true,即可将每行日志输出成一行json。

【转载】JsonLayout log4j2 json格式输出日志的更多相关文章

  1. JsonLayout log4j2 json格式输出日志

    如果日志输出时,想改变日志的输出形式为Json格式,可以在log4j2.xml中使用JsonLayout标签,使日志输出格式为Json格式. 前提需要Jackson的包,保证项目中包含jackson的 ...

  2. Windows 系统下json 格式的日志文件发送到elasticsearch

    Windows 系统下json 格式的日志文件发送到elasticsearch配置 Nxlog-->logstash-->ElasticSearch Logstash https://ww ...

  3. Golang:将日志以Json格式输出到Kafka

    在上一篇文章中我实现了一个支持Debug.Info.Error等多个级别的日志库,并将日志写到了磁盘文件中,代码比较简单,适合练手.有兴趣的可以通过这个链接前往:https://github.com/ ...

  4. elk-nginx输出json格式的日志

    把Nginx日志的格式输出成JSON格式展示在Kibana面板,生产环境中基本都是这么使用. 1, 配置nginx 主要修改nginx的访问日志格式,这里定义成json格式,以便后面logstash更 ...

  5. ELK之nginx日志使用json格式输出

    json Nginx默认日志输出格式为文本非json格式,修改配置文件即可输出json格式便于收集以及绘图 修改nginx配置文件添加配置,增加一个json输出格式的日志格式 log_format a ...

  6. springboot集成log4j2 + logstash 异步输出日志

    一. spring boot 集成log4j2 1.maven引入jar包 <dependency> <groupId>org.springframework.boot< ...

  7. Beats:使用 Filebeat 导入 JSON 格式的日志文件

    转载自:https://blog.csdn.net/UbuntuTouch/article/details/108504014 在今天的文章中,我来用另外的一种方式来展示如何导入一个 JSON 格式的 ...

  8. 使用json格式输出

    /** * json输出 * * @param unknown_type $info */ public function json_out ($info) { header('Content-typ ...

  9. python 把数据 json格式输出

    有个要求需要在python的标准输出时候显示json格式数据,如果缩进显示查看数据效果会很好,这里使用json的包会有很多操作 import json date = {u'versions': [{u ...

随机推荐

  1. Java基础学习-基本数据类型变量的定义和使用

    注意:如果使用notepad++编码,在cmd控制台编译时报错(编码GBK的不可映射字符),可以参考如下链接进行设置:https://jingyan.baidu.com/article/e3c78d6 ...

  2. Python3 tkinter基础 TK title 设置窗体的标题

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  3. tp5.1中的容器和facade的实现

    首先定义: 容器(Container)实现类的统一管理,确保对象实例的唯一性. 门面(Facade)为容器(Container)中的类提供了一个静态调用接口,相比于传统的静态方法调用, 带来了更好的可 ...

  4. Linux——高效玩转命令行

    [0]统计文件or压缩文件的行数 zcat file.gz | sed -n '$='   #迅速.直接打印出多少行.-n 取消默认的输出,使用安静(silent)模式    '$='  不知道是什么 ...

  5. 剑指offer 11:二进制中 1 的个数

    题目描述 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 解题代码 法一: public class Solution { public int NumberOf1(int n) { ...

  6. Job for docker.service failed because the control process exited with error

    Docker 无法启动 报错信息:Job for docker.service failed because the control process exited with error 找了很久才解决 ...

  7. linux中centros6.7安装php5.6,httpd-2.2.19(web产品化)遇到的问题总结

    前段时间在公司实习,web系统产品化的过程踩了很多坑,在这边总结一下,由于对linux不是很懂,全是自己一步步一个一个问题解决的 1,查看系统中是否安装apache,php,mysql环境 Apach ...

  8. 记一次IIS发布网站导致系统时常跳入登录页面的问题解决

    服务器:winserver2012R2 iis 发布网站后,正常浏览网页,时常跳到登录页面,第一反应session过期,因为登录信息都存在session,但session 都是默认配置过期时间为20分 ...

  9. js打印html指定元素,解决动态获取的图片无法打印问题

    用js来调用浏览器的打印接口很容易,一两行代码就能搞定,但是有些数据是通过动态生成的,例如一些动态生成的二维码,有时候调用打印接口图片会无法显示 为了解决这个问题,建议使用下面这个库 下载:https ...

  10. 在单机Docker上安装 Traefik 反向代理-负载均衡器

    一.创建Traefik和容器应用的连接网络 sudo docker network create traefik-net 二.下载Traefik样本配置文件wget https://raw.githu ...