在阿里云、或者日志分析时使用JSON格式输出日志更加方便。
依赖
增加Logbak JSON解析依赖。
另外需要注意的是JSON格式输出依赖Jackson,根据工程情况按需添加Jackson依赖。
<!--日志--><dependency><groupId>ch.qos.logback.contrib</groupId><artifactId>logback-json-classic</artifactId><version>0.1.5</version></dependency><!-- Logbak默认JSON格式 方式需要的依赖--><dependency><groupId>ch.qos.logback.contrib</groupId><artifactId>logback-jackson</artifactId><version>0.1.5</version></dependency><!-- Logback自定义JSON格式 方式需要的依赖--><dependency><groupId>net.logstash.logback</groupId><artifactId>logstash-logback-encoder</artifactId><version>5.2</version></dependency>
配置输出格式
修改格式主要是修改logback.xml
中appender配置。
介绍两种修改JSON格式方式:
- Logbak默认JSON格式:Logback默认JSON输出格式,没有自定义的字段,适合简单的日志输出。
- Logback自定义JSON格式:支持自定义输出JSON key,例如打印HTTP 请求url、请求方的IP、userAgent等信息,并且支持配置输出格式,例如time 格式、message长度、exception 堆栈深度、logger格式等等。推荐使用此方式。
Logbak默认JSON格式
<appender name="json" class="ch.qos.logback.core.ConsoleAppender"><layout class="ch.qos.logback.contrib.json.classic.JsonLayout"><jsonFormatterclass="ch.qos.logback.contrib.jackson.JacksonJsonFormatter"><prettyPrint>true</prettyPrint></jsonFormatter><timestampFormat>yyyy-MM-dd' 'HH:mm:ss.SSS</timestampFormat></layout>
</appender><logger name="jsonLogger" level="TRACE"><appender-ref ref="json" />
</logger>
Logback自定义JSON格式
<appender name="consoleJsonEncoder" class="ch.qos.logback.core.ConsoleAppender"><encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder"><jsonFactoryDecorator class="net.logstash.logback.decorate.CharacterEscapesJsonFactoryDecorator"><escape><targetCharacterCode>10</targetCharacterCode><escapeSequence>\u2028</escapeSequence></escape></jsonFactoryDecorator><providers><pattern><pattern>{"time":"%date{ISO8601}","traceId":"%mdc{traceId}","level":"%level","thread":"%thread","userId":"%mdc{userId}","userName":"%mdc{userName}","ip":"%mdc{ip}","url":"%mdc{url}","ua":"%mdc{ua}","clazz":"%logger{10}","line":"%line","message":"%msg","exception":"%ex{full}"}</pattern></pattern></providers></encoder></appender>
- %date{ISO8601}:指定日期格式,输出 2023-08-03 16:12:01,172。
- %mdc{traceId}:格式为%mdc{key},key替换为MDC put使用的值。输出MDC类put的traceId
- %level:日志级别,例如:debug、info、warn、error
- %thread:线程ID
- %logger:当前输出日志class名称,例如:c.c.w.c.g.GroupMealCallbackController
- %line:打印日志行号
- %msg:程序里面输出的日志信息。如果msg过长可以截取指定长度,语法:%.-nmsg,例如%.-1024msg 截取前1024个字符。
- %ex:异常堆栈信息
更多Logback pattern可以参考官方文档:Conversion Word
日志输出效果:
{"time": "2023-08-03 16:12:02,839","traceId": "f935f95c01ee4f9f9af3c34e0e1c061a","level": "INFO ","thread": "http-nio-8663-exec-11","userId": "6","userName": "张三","ip": "172.18.196.23","url": "/xx/callback/order/completeCallback","ua": "Apache-HttpClient/4.5.1 (Java/1.8.0_201)","clazz": "c.c.w.c.g.GroupMealCallbackController","line": "39","message": "订单完成回调","exception": ""
}