Spring Boot Logback日志格式改为JSON

在阿里云、或者日志分析时使用JSON格式输出日志更加方便。

依赖

增加Logbak JSON解析依赖。

另外需要注意的是JSON格式输出依赖Jackson,根据工程情况按需添加Jackson依赖。

xml 复制代码
<!--日志-->
        <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格式方式:

  1. Logbak默认JSON格式:Logback默认JSON输出格式,没有自定义的字段,适合简单的日志输出。
  2. Logback自定义JSON格式:支持自定义输出JSON key,例如打印HTTP 请求url、请求方的IP、userAgent等信息,并且支持配置输出格式,例如time 格式、message长度、exception 堆栈深度、logger格式等等。推荐使用此方式。

Logbak默认JSON格式

xml 复制代码
<appender name="json" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
        <jsonFormatter
            class="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格式

xml 复制代码
<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

日志输出效果:

json 复制代码
{
	"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": ""
}
相关推荐
科兴第一吴彦祖1 小时前
基于Spring Boot + Vue 3的乡村振兴综合服务平台
java·vue.js·人工智能·spring boot·推荐算法
ZhengEnCi2 小时前
🚀创建第一个 SpringBoot 应用-零基础体验开箱即用的神奇魅力
java·spring boot
非凡的世界2 小时前
微服务——SpringBoot使用归纳——Spring Boot中使用拦截器——拦截器的快速使用
spring boot·微服务·架构
骷髅头的寂寞3 小时前
Spring Boot 整合 Thymeleaf 生成 HTML 页面教学
spring boot·html·intellij-idea
你们瞎搞5 小时前
arcgis矢量数据转为标准geojson格式
python·arcgis·json·地理空间数据
神仙别闹5 小时前
基于Java(Spring Boot)+MySQL实现电商网站
java·spring boot·mysql
hacker_LeeFei6 小时前
Springboot连接多数据源(MySQL&Oracle)
spring boot·mysql·oracle
Roye_ack18 小时前
【项目实战 Day12】springboot + vue 苍穹外卖系统(Apache POI + 工作台模块 + Excel表格导出 完结)
java·spring boot·后端·excel·苍穹外卖
qq_54702617918 小时前
SpringBoot+Redis实现电商秒杀方案
spring boot·redis·后端