当前位置: 首页 > news >正文

SpringBoot 日志分组

一、先搞懂:什么是 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. 不用挨个给每个包写一行配置,一行控制一堆包,这就是日志分组的意义。
http://www.jsqmd.com/news/736222/

相关文章:

  • wechatapi iPad协议:私域批量操作的唯一解
  • GitHub开源项目进度追踪插件:自动化进度条与看板集成实战
  • LLM微调实战:使用LLM-Finetuning-Toolkit高效微调Mistral-7B模型
  • 告别逐帧标注!用SAM+TAM零代码搞定视频多目标跟踪与分割(保姆级实战)
  • EdgeRemover:彻底告别Microsoft Edge的3种专业方案
  • 第2篇:应付百万并发商品系统之需求文档
  • 从同步阻塞到毫秒级响应:PHP 9.0 + Swoole 5.1 + LangChain-PHP构建企业级AI助手,7步完成生产就绪配置
  • RK3568项目实战:用4G模块打造你的户外物联网网关(ECM模式真香)
  • 保姆级教程:在Ubuntu 20.04上用TensorFlow 2.6和RTX 2080Ti复现RandLA-Net(SemanticKITTI数据集)
  • 轻量级爬虫框架easyclaw:快速上手与实战指南
  • ch32v003记录2,串口通信例程
  • 不止是改密码:深度挖掘麒麟KYLINOS恢复模式的隐藏玩法与安全边界
  • 多智能体系统性能优化:架构选择与错误控制策略
  • 离散扩散模型原理与Duo++优化实践
  • CF1666E 题解
  • 《文字定律》下册第三篇 (走向三级文明的人和AI)
  • 猫抓浏览器插件终极指南:高效嗅探网页视频音频资源的免费开源工具
  • MECOOL KP1智能投影仪评测:Android TV与1080P画质体验
  • EASY-HWID-SPOOFER:3大核心技术深度解析与实战指南
  • 还在吃预制菜的年轻人,被硬生生地逼成了宠物营养师
  • VMware Workstation 17保姆级教程:手把手教你安装Ubuntu 22.04.3 LTS服务器版(含SSH配置与Root登录)
  • 开源命令行工具指南:构建高效开发工作流与自动化实践
  • 保姆级教程:给你的Nginx access.log“加料”,轻松记录POST请求体和自定义请求头
  • AI驱动社交媒体自动化:从CLIP图像识别到GPT文案生成的技术实践
  • 通俗数学6-经典电子半径和康普顿波长的比正好是反常磁矩的倒数
  • 从WebSocket到LevelDB:构建极致高效聊天应用的技术架构与实践
  • Python爬虫实战:抖音无水印视频下载工具原理与避坑指南
  • 【限时解禁】VSCode 2026私有Agent Hub部署方案:仅限首批200家企业的内测配置模板与安全沙箱白皮书
  • 在Windows 10/11中实现HEIC缩略图预览:开源解决方案完全指南
  • 当核心交换机宕机时,你的业务能扛几秒?深度拆解MSTP+VRRP的故障切换实战