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": ""
}
相关推荐
じòぴé南冸じょうげん12 分钟前
小程序的project.private.config.json是无依赖文件,那可以删除吗?
前端·小程序·json
爱吃烤鸡翅的酸菜鱼21 分钟前
【Spring】原理解析:Spring Boot 自动配置
java·spring boot
十八旬27 分钟前
苍穹外卖项目实战(day7-1)-缓存菜品和缓存套餐功能-记录实战教程、问题的解决方法以及完整代码
java·数据库·spring boot·redis·缓存·spring cache
郑洁文1 小时前
基于SpringBoot的天气预报系统的设计与实现
java·spring boot·后端·毕设
optimistic_chen2 小时前
【Java EE进阶 --- SpringBoot】Spring DI详解
spring boot·笔记·后端·spring·java-ee·mvc·di
中国胖子风清扬2 小时前
Rust 日志库完全指南:从入门到精通
spring boot·后端·rust·学习方法·logback
xiaogg36783 小时前
springboot rabbitmq 延时队列消息确认收货订单已完成
spring boot·rabbitmq·java-rabbitmq
麦兜*3 小时前
MongoDB 6.0 新特性解读:时间序列集合与加密查询
数据库·spring boot·mongodb·spring·spring cloud·系统架构
依稀i1233 小时前
Spring Boot + MySQL 创建超级管理员
spring boot·mysql
千里码aicood3 小时前
【springboot+vue】党员党建活动管理平台(源码+文档+调试+基础修改+答疑)
java·数据库·spring boot