SpringBoot 日志分组
一、先搞懂:什么是 SpringBoot 日志分组
1. 定义
日志分组:把多个不同的 Java 包路径,打包归为一个自定义别名(组名)。
之后不用逐个给每个包单独配日志级别,只给这个组名配一次级别,组里所有包全部生效。
2. 核心作用
简化配置、批量控制一批关联包的日志级别,不用写一堆logging.level.xxx。
二、日志分组语法格式
- 先定义分组:把多个包归到一个组
logging.group.自定义组名=包1,包2,包3- 再给分组设置日志级别
logging.level.自定义组名=info/debug/trace三、:org.apache.catalina/org.apache.coyote/org.apache.tomcat到底是什么
通俗理解
这三个是Tomcat 服务器拆分出来的3大核心Java功能包
就像电脑分了三个文件夹,每个文件夹管 Tomcat 一块专属功能,每个包里的代码运行时都会输出自己的日志。
org.apache.catalina
Tomcat 核心引擎、Servlet 容器
负责:项目启动关闭、请求整体流程调度、Servlet 生命周期
输出日志:服务启动、应用初始化、请求分发核心日志org.apache.coyote
Tomcat 网络连接器、HTTP 协议解析
负责:监听8080端口、接收浏览器请求、解析HTTP协议、管理客户端连接
输出日志:端口启动、连接建立/断开、请求头解析、协议报错org.apache.tomcat
Tomcat 通用基础工具包
负责:内部工具类、公共基础组件、底层通用能力
输出日志:Tomcat 版本、底层工具运行、通用组件日志
和日志的关联关键点
Java 日志规则:日志是按 包路径 归属的
一个类在哪个包里,它打出来的日志就归属这个包;
给某个包设日志级别,这个包下所有类的日志详细程度都会被控制。
所以把这3个包分到一个tomcat组,设一次级别,就统一控制整套 Tomcat 底层日志。
四、日志分组 使用场景(什么时候用)
批量管控同组件多包日志
Tomcat、SpringWeb、MyBatis、数据库JDBC 都分散在多个包,一个个配置太麻烦,用分组一键统一级别。排查问题快速切换日志详细度
日常用info;排查接口404、请求无响应、连接超时,改一行分组级别为debug/trace即可,不用改一堆配置。复用 SpringBoot 内置预定义分组
SpringBoot 已经自带两个常用组,不用自己定义,直接用:
web组:包含 SpringWeb、HTTP、Tomcat 相关所有包logging.level.web=debugsql组:包含 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六、三个日志级别对应输出内容(核心区别)
info(默认)
只输出关键节点:服务启动、端口监听、服务关闭,没有请求细节。debug
输出请求处理流程:请求进入、分配Servlet、处理完毕、线程调度,适合排查接口不通、404、500。trace
输出底层最细粒度:HTTP完整请求头、字节流读取、Socket连接、会话解析,日志量极大,只用来排查底层协议/连接异常。
级别包含关系:trace > debug > info
开 trace 会同时打印 debug、info 所有日志。
七、日志分组 一句话终极总结
- 分组 = 给一堆相关Java包起一个统一别名
- 配置一次分组级别 = 批量控制所有包的日志
catalina/coyote/tomcat是Tomcat三大核心功能包,各自输出自己模块的日志- 开发日常用 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. 四个关键分组分别管什么
- tomcat组
管服务器底层:端口监听、连接、HTTP请求接收、容器启动关闭。 - web内置组
管Spring MVC、接口请求、控制器、拦截器、请求映射。 - sql内置组
管数据库连接、JDBC底层、SQL执行底层细节。 - mybatis自定义组
管Mapper映射、SQL语句打印、参数绑定、查询结果日志。
2. 什么时候该开什么级别
- 日常开发/上线:全部 info,日志干净不刷屏
- 想看执行的SQL、参数:把
mybatis、sql改成debug - 接口404、请求进不来、接口报错:把
web、tomcat改成debug - 网络超时、HTTP协议异常、连接断开:把
tomcat改成trace
3. 再帮你回顾日志分组本质
- 先
logging.group.xxx=包1,包2,包3把多个包归为一个名字 - 再
logging.level.xxx=级别给这个名字统一设级别 - 不用挨个给每个包写一行配置,一行控制一堆包,这就是日志分组的意义。
