JsonLayoutlog4j2json格式输出⽇志
如果⽇志输出时,想改变⽇志的输出形式为Json格式,可以在l中使⽤JsonLayout标签,使⽇志输出格式为Json格式。
前提需要Jackson的包,保证项⽬中包含jackson的依赖
然后在l中在需要⽇志输出的地⽅,添加
<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" : "ip.framework.apollo.internals.DefaultMetaServerProvider",
"message" : "Could not find meta server address, because it is not available in neither (1) JVM system property 'a', (2) OS env variable 'APOLLO_META' (3) property 'a' from server.properties nor (4) property 'a' fro  "endOfBatch" : false,
"loggerFqcn" : "org.apache.logging.slf4j.Log4jLogger",
"threadId" : 1,
"threadPriority" : 5
}
但是这个⽇志是格式化后的json,有同事提出需求,想让⼀个json对象输出为⼀⾏,这样⽇志读取的时候,可以以⼀个对象为单位读取,⽽不是⼀⾏。
继续查看JsonLayout 源码,既然他提供了转换为json,那是不是也可以提供格式化json规则。
org.apache.layout.JsonLayout。继承⾃AbstractJacksonLayout,在AbstractJacksonLayout 中有下⾯⼏个属性介绍。我们下⾯主要介绍这⼏个属性的含义及
使⽤⽅法。
protected final String eventEol;
protected final ObjectWriter objectWriter;
protected final boolean compact;
protected final boolean complete;
phpjson格式化输出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.debug()等等)之后强制换⾏输出。
objectWriter暂不清楚
通过上⾯的属性介绍,根据需要,只需将compact ,evetEol 设置成true,即可将每⾏⽇志输出成⼀⾏json。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。