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 eol;
    protected final ObjectWriter objectWriter;
    protected final boolean compact;
    protected final boolean complete;

猜你喜欢

转载自www.cnblogs.com/wenq001/p/10251634.html