
一、SpringBoot 默认日志体系1. 核心依赖默认集成SpringBoot 默认采用SLF4J Logback日志组合无需手动引入依赖spring-boot-starter 自动封装SLF4J日志门面统一日志API解耦日志实现所有日志输出都基于此规范Logback日志具体实现SpringBoot 默认首选性能优于 Log4j排除默认日志、替换为 Log4j2 需手动修改依赖日常开发默认体系即可满足需求。2. 默认日志规则默认日志级别INFO默认输出位置控制台无文件落地默认日志格式时间、线程、日志级别、类名、日志内容二、日志级别优先级核心SpringBoot 沿用 SLF4J 标准日志级别优先级从低到高排列级别越高输出日志越少、越精简。1. 完整级别排序常用5级TRACE DEBUG INFO WARN ERRORTRACE追踪最低级别记录程序完整执行链路、细节参数用于代码调试追踪生产环境禁用DEBUG调试记录开发调试关键信息如接口入参、SQL执行、变量赋值仅测试环境使用INFO信息默认级别记录系统正常运行核心信息如服务启动、接口调用成功、定时任务执行WARN警告记录不影响程序运行的异常情况如参数冗余、接口超时重试、资源即将耗尽ERROR错误最高有效级别记录程序报错、异常崩溃、业务失败信息需人工处理2. 两个特殊级别ALL打印所有级别日志TRACEDEBUGINFOWARNERROROFF关闭所有日志输出极少使用3. 级别生效规则设置某一级别会打印当前级别及更高优先级的所有日志示例设置级别为 INFO输出 INFO、WARN、ERROR 日志过滤 TRACE、DEBUG设置级别为 DEBUG输出 DEBUG、INFO、WARN、ERROR 日志设置级别为 ERROR仅输出错误日志三、日志级别配置方式重点支持配置文件静态配置和运行时动态配置两种方式适配开发、测试、生产不同场景。1. 配置文件静态配置最常用优先级application.yml/application.properties支持全局级别 包级别精准控制。1application.yml 配置# 全局日志级别所有包默认级别logging:level:root:INFO# 根路径默认级别默认INFO# 精准控制指定包/类的日志级别优先级高于全局com.example.demo:DEBUG# 自定义项目包开启调试日志org.springframework.web:WARN# 框架web模块只打印警告、错误com.baomidou.mybatisplus:DEBUG# 开启mybatis sql日志java.sql:ERROR# 数据库底层仅打印错误2application.properties 配置# 全局级别 logging.level.rootINFO # 包级别精准配置 logging.level.com.example.demoDEBUG logging.level.org.springframework.webWARN logging.level.java.sqlERROR2. 自定义 logback.xml 配置高阶如需自定义日志格式、文件分割、保留天数、分级输出可在resources目录下创建logback-spring.xmlSpringBoot 推荐后缀支持环境变量。核心优势可实现按环境区分日志级别开发DEBUG、生产INFO、日志文件滚动、错误日志单独存储等功能。3. 运行时动态修改日志级别无需重启服务生产环境临时排查问题可通过SpringBoot Actuator动态调整日志级别无需重启服务。步骤1引入actuator依赖dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-actuator/artifactId/dependency步骤2开启日志端点management:endpoints:web:exposure:include:loggers# 暴露日志级别修改端点步骤3动态调整接口查询指定包日志级别GEThttp://localhost:8080/actuator/loggers/com.example.demo动态修改级别临时生效重启失效POST 上述地址请求体{configuredLevel:DEBUG}四、不同环境日志级别最佳实践通过多环境配置文件区分级别兼顾开发调试效率、生产性能与日志整洁度。1. 开发环境application-dev.yml全局级别DEBUG自定义业务包DEBUG打印入参、SQL、流程日志框架包WARN屏蔽框架冗余日志目的最大化打印细节方便调试排错2. 测试环境application-test.yml全局级别INFO核心业务包DEBUG目的兼顾日志完整性与简洁性模拟生产环境3. 生产环境application-prod.yml全局级别INFO所有框架、底层包WARN/ERROR业务包INFO关闭冗余调试日志目的减少日志IO消耗提升服务性能避免日志刷屏五、代码中日志级别使用规范1. 标准日志注入方式推荐使用 Lombok 简化代码无需手动创建 Logger 对象importlombok.extern.slf4j.Slf4j;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.RestController;Slf4jRestControllerpublicclassLogController{GetMapping(/log)publicvoidtestLog(){log.trace(TRACE级别程序追踪细节);log.debug(DEBUG级别接口调试参数);log.info(INFO级别接口正常调用);log.warn(WARN级别参数存在冗余);log.error(ERROR级别业务执行失败);}}2. 级别使用场景规范TRACE极细粒度追踪循环、变量迭代、底层调用细节DEBUG接口入参出参、SQL语句、缓存读写、第三方接口调用参数INFO服务启动成功、核心业务流程完成、定时任务执行、用户登录/操作记录WARN参数非空但不规范、重试机制触发、资源即将超时、兼容降级场景ERROR接口异常、数据库操作失败、空指针、业务校验失败、第三方调用报错必须打印异常堆栈六、常见问题与避坑指南1. 配置级别不生效检查配置前缀必须是logging.level拼写错误是高频问题优先级问题包级别配置 全局root配置多环境冲突检查是否被其他环境配置文件覆盖logback-spring.xml 配置优先级高于 yml/properties2. 生产环境日志过多卡顿服务关闭全局 DEBUG 级别仅保留核心业务 INFO 级别屏蔽框架、数据库、中间件的冗余日志设为 WARN配置日志文件滚动策略避免单日志文件过大3. 异常日志打印不完整ERROR 级别必须传入异常对象否则无堆栈信息无法定位问题// 错误写法无堆栈log.error(数据查询失败);// 正确写法打印异常堆栈try{// 业务代码}catch(Exceptione){log.error(数据查询失败,e);}4. 动态日志级别失效动态修改仅临时内存生效服务重启后会恢复配置文件默认级别永久修改需改配置文件。七、核心总结SpringBoot 默认日志组合SLF4J Logback默认级别 INFO级别优先级TRACEDEBUGINFOWARNERROR设置级别向上兼容配置优先级logback-spring.xml 包级别yml配置 全局root配置环境规范开发DEBUG、测试INFO、生产WARN/ERROR兼顾调试与性能生产排错可通过Actuator动态调级无需重启服务