一、先搞懂:什么是 SpringBoot 日志分组

1. 定义

日志分组:把多个不同的 Java 包路径,打包归为一个自定义别名(组名)
之后不用逐个给每个包单独配日志级别,只给这个组名配一次级别,组里所有包全部生效

2. 核心作用

简化配置、批量控制一批关联包的日志级别,不用写一堆 logging.level.xxx


二、日志分组语法格式

  1. 先定义分组:把多个包归到一个组
logging.group.自定义组名=包1,包2,包3
  1. 再给分组设置日志级别
logging.level.自定义组名=info/debug/trace

在这里插入图片描述


三、:org.apache.catalina / org.apache.coyote / org.apache.tomcat 到底是什么

通俗理解

这三个是 Tomcat 服务器拆分出来的3大核心Java功能包
就像电脑分了三个文件夹,每个文件夹管 Tomcat 一块专属功能,每个包里的代码运行时都会输出自己的日志

  1. org.apache.catalina
    Tomcat 核心引擎、Servlet 容器
    负责:项目启动关闭、请求整体流程调度、Servlet 生命周期
    输出日志:服务启动、应用初始化、请求分发核心日志

  2. org.apache.coyote
    Tomcat 网络连接器、HTTP 协议解析
    负责:监听8080端口、接收浏览器请求、解析HTTP协议、管理客户端连接
    输出日志:端口启动、连接建立/断开、请求头解析、协议报错

  3. org.apache.tomcat
    Tomcat 通用基础工具包
    负责:内部工具类、公共基础组件、底层通用能力
    输出日志:Tomcat 版本、底层工具运行、通用组件日志

和日志的关联关键点

Java 日志规则:日志是按 包路径 归属的
一个类在哪个包里,它打出来的日志就归属这个包;
给某个包设日志级别,这个包下所有类的日志详细程度都会被控制。

所以把这3个包分到一个 tomcat 组,设一次级别,就统一控制整套 Tomcat 底层日志。


四、日志分组 使用场景(什么时候用)

  1. 批量管控同组件多包日志
    Tomcat、SpringWeb、MyBatis、数据库JDBC 都分散在多个包,一个个配置太麻烦,用分组一键统一级别。

  2. 排查问题快速切换日志详细度
    日常用 info;排查接口404、请求无响应、连接超时,改一行分组级别为 debug/trace 即可,不用改一堆配置。

  3. 复用 SpringBoot 内置预定义分组
    SpringBoot 已经自带两个常用组,不用自己定义,直接用

  • web 组:包含 SpringWeb、HTTP、Tomcat 相关所有包
    logging.level.web=debug
    
  • sql 组:包含 JDBC、MyBatis、Hibernate 数据库相关所有包
    logging.level.sql=debug
    

五、Tomcat 分组完整可直接用配置

# 1. 定义tomcat日志分组,把三个核心包归为一组
logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat

# 2. 设置分组日志级别 三选一
# 日常默认
#logging.level.tomcat=info
# 排查普通接口问题
#logging.level.tomcat=debug
# 底层深度排查协议、连接问题
#logging.level.tomcat=trace

六、三个日志级别对应输出内容(核心区别)

  1. info(默认)
    只输出关键节点:服务启动、端口监听、服务关闭,没有请求细节

  2. debug
    输出请求处理流程:请求进入、分配Servlet、处理完毕、线程调度,适合排查接口不通、404、500。

  3. trace
    输出底层最细粒度:HTTP完整请求头、字节流读取、Socket连接、会话解析,日志量极大,只用来排查底层协议/连接异常。

级别包含关系:trace > debug > info
开 trace 会同时打印 debug、info 所有日志。


七、日志分组 一句话终极总结

  1. 分组 = 给一堆相关Java包起一个统一别名
  2. 配置一次分组级别 = 批量控制所有包的日志
  3. catalina/coyote/tomcat 是Tomcat三大核心功能包,各自输出自己模块的日志
  4. 开发日常用 info,排查问题切 debug,底层疑难问题切 trace,调试完切回 info 避免日志爆炸。

八、 SpringBoot 完整版常用日志分组配置模板

放在 application.properties 直接用,每一行都带大白话注释,以后随时照着改就行。

# ===================== 日志分组 自定义定义 =====================
# 1. Tomcat 核心分组:把Tomcat三大核心包归为一组
logging.group.tomcat=org.apache.catalina,org.apache.coyote,org.apache.tomcat

# 2. MyBatis 分组:统一控制MyBatis所有底层日志
logging.group.mybatis=org.apache.ibatis,com.ibatis

# 3. Spring 核心分组:Spring框架整体日志
logging.group.spring=org.springframework.beans,org.springframework.context,org.springframework.core

# ===================== 给分组设置日志级别 =====================
# Tomcat 日志级别:日常info,排查接口问题debug,底层协议问题trace
logging.level.tomcat=info

# MyBatis 开debug 能看到 执行的SQL语句、参数、返回结果
logging.level.mybatis=debug

# Spring 核心框架日志
logging.level.spring=info

# ===================== SpringBoot 内置自带分组(不用自己定义,直接用) =====================
# 内置web组:包含SpringMVC、HTTP请求、Tomcat web相关全套
# 排查接口请求、拦截器、控制器映射 直接开这个
logging.level.web=info

# 内置sql组:包含JDBC、数据库连接、SQL执行底层
logging.level.sql=debug

# ===================== 自己项目业务代码日志 =====================
# 改成你自己的项目根包,比如com.example.demo
logging.level.com.example.demo=debug

配套使用说明

1. 四个关键分组分别管什么
  1. tomcat组
    管服务器底层:端口监听、连接、HTTP请求接收、容器启动关闭。
  2. web内置组
    管Spring MVC、接口请求、控制器、拦截器、请求映射。
  3. sql内置组
    管数据库连接、JDBC底层、SQL执行底层细节。
  4. mybatis自定义组
    管Mapper映射、SQL语句打印、参数绑定、查询结果日志。
2. 什么时候该开什么级别
  • 日常开发/上线:全部 info,日志干净不刷屏
  • 想看执行的SQL、参数:把 mybatis、sql 改成 debug
  • 接口404、请求进不来、接口报错:把 web、tomcat 改成 debug
  • 网络超时、HTTP协议异常、连接断开:把 tomcat 改成 trace
3. 再帮你回顾日志分组本质
  1. logging.group.xxx=包1,包2,包3 把多个包归为一个名字
  2. logging.level.xxx=级别 给这个名字统一设级别
  3. 不用挨个给每个包写一行配置,一行控制一堆包,这就是日志分组的意义。

更多推荐