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": ""
}
相关推荐
于先生吖43 分钟前
Java+SpringBoot 无人健身房物联网系统完整源码实现
java·spring boot·物联网
johnrui1 小时前
SpringBoot-JdbcTemplate
java·spring boot·后端
indexsunny1 小时前
互联网大厂Java面试实战:从Spring Boot到微服务的技术问答解析
java·spring boot·redis·微服务·消息队列·电商
希望永不加班2 小时前
SpringBoot 过滤器(Filter)与请求链路梳理
java·spring boot·后端·spring
jiankeljx3 小时前
Java实战:Spring Boot application.yml配置文件详解
java·网络·spring boot
Zzxy3 小时前
Spring Boot 参数校验
java·spring boot
云姜.4 小时前
JSON Schema使用
python·json
Zzxy5 小时前
Spring Boot集成Swagger/Knife4j
spring boot·swagger
用户8307196840827 小时前
Spring Boot 中Servlet、Filter、Listener 四种注册方式全解析
java·spring boot
xixingzhe27 小时前
spring boot druid 10秒超时问题
java·数据库·spring boot