2026/10/15 19:12:20

日志级别基础 + Spring Boot 日志实践指南

日志级别基础 + Spring Boot 日志实践指南 目录日志级别基础 Spring Boot 日志实践指南第一部分日志级别基础知识一、什么是日志级别二、日志级别从低到高三、日志级别过滤规则四、各级别详细说明1️⃣ TRACE追踪2️⃣ DEBUG调试3️⃣ INFO信息4️⃣ WARN警告5️⃣ ERROR错误6️⃣ FATAL / CRITICAL严重错误五、不同日志框架级别对照Logback / Log4j / SLF4JJava 标准日志Python logging六、日志级别使用建议七、日志级别最佳实践✅ 正确示例❌ 错误示例第二部分Spring Boot 日志配置与实践一、Spring Boot 默认日志体系二、application.yml 简单配置配置说明三、logback-spring.xml 推荐配置完整配置四、代码中使用日志✅ 推荐Slf4j✅ 备选LoggerFactory两者关系五、多环境日志级别application-dev.ymlapplication-prod.yml启动指定环境六、完整流程总结七、最终推荐方案我们采用“先理论、后实践”的结构先补充日志级别的基础知识再接Spring Boot 日志配置与使用流程。日志级别基础 Spring Boot 日志实践指南第一部分日志级别基础知识一、什么是日志级别日志级别用于表示日志的重要程度日志的详细程度当前日志是否需要输出出现问题时需要关注的紧急程度通过设置日志级别可以✅ 开发时看到更多调试信息✅ 生产环境只保留重要日志✅ 快速定位问题✅ 避免日志过多影响性能二、日志级别从低到高常见日志级别如下TRACE DEBUG INFO WARN ERROR FATAL级别名称严重程度是否默认输出使用场景TRACE追踪最低否最详细的运行过程DEBUG调试低通常否开发调试INFO信息中是正常运行信息WARN警告较高是潜在风险ERROR错误高是功能执行失败FATAL严重错误最高是系统即将崩溃部分日志框架使用CRITICAL含义与FATAL类似。三、日志级别过滤规则假设设置日志级别为INFOTRACE ❌ 不输出 DEBUG ❌ 不输出 INFO ✅ 输出 WARN ✅ 输出 ERROR ✅ 输出 FATAL ✅ 输出如果设置日志级别为ERRORINFO ❌ 不输出 WARN ❌ 不输出 ERROR ✅ 输出 FATAL ✅ 输出✅规律只有等于或高于设置级别的日志才会输出。四、各级别详细说明1️⃣ TRACE追踪最详细的日志一般用于方法进入和退出每一步变量变化复杂业务执行过程TRACE 进入 calculate() 方法参数 a1, b2 TRACE calculate() 方法执行结束返回值3⚠️ 生产环境一般关闭。2️⃣ DEBUG调试用于开发和排查问题DEBUG 用户查询参数userId1001 DEBUG SQL 执行耗时120ms适用环境本地开发测试环境临时线上排查3️⃣ INFO信息记录系统正常运行中的关键节点INFO 应用启动完成 INFO 用户登录成功userId1001 INFO 订单创建成功orderIdORD123✅生产环境默认级别4️⃣ WARN警告表示存在潜在风险但不影响程序继续运行WARN 库存不足当前库存2请求数量5 WARN 接口响应较慢耗时3200ms WARN 使用了即将废弃的接口5️⃣ ERROR错误表示某个功能执行失败ERROR 订单创建失败userId1001原因数据库连接超时 ERROR 支付回调处理失败orderIdORD123通常需要开发人员介入需要记录异常堆栈需要监控和告警6️⃣ FATAL / CRITICAL严重错误表示系统可能无法继续运行FATAL 数据库连接池耗尽应用无法继续处理请求 FATAL 核心配置文件缺失程序即将退出五、不同日志框架级别对照Logback / Log4j / SLF4JOFF FATAL ERROR WARN INFO DEBUG TRACE ALLJava 标准日志SEVERE WARNING INFO CONFIG FINE FINER FINEST OFFPython loggingCRITICAL ERROR WARNING INFO DEBUG六、日志级别使用建议本地开发DEBUG 测试环境DEBUG / INFO 生产环境INFO 紧急排查临时 DEBUG 长期运行不要开启 TRACE七、日志级别最佳实践✅ 正确示例INFO 用户下单成功orderIdORD123 WARN 库存不足剩余库存2 ERROR 订单创建失败orderIdORD123❌ 错误示例INFO 进入方法 INFO 退出方法 ERROR 操作失败第二部分Spring Boot 日志配置与实践一、Spring Boot 默认日志体系Spring Boot 默认使用SLF4J日志门面 Logback日志实现项目通常已经包含dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency日志依赖由spring-boot-starter-logging自动引入。二、application.yml 简单配置logging: level: root: INFO org.springframework: WARN com.example.demo: DEBUG pattern: console: %d{yyyy-MM-dd HH:mm:ss} %-5level %logger - %msg%n file: name: logs/app.log配置说明配置项作用logging.level.root全局日志级别com.example.demo指定包日志级别pattern.console控制台日志格式file.name日志文件路径三、logback-spring.xml 推荐配置路径src/main/resources/logback-spring.xml完整配置?xml version1.0 encodingUTF-8? configuration property nameLOG_PATTERN value%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %logger{36} - %msg%n/ !-- 控制台 -- appender nameCONSOLE classch.qos.logback.core.ConsoleAppender encoder pattern${LOG_PATTERN}/pattern /encoder /appender !-- 文件 -- appender nameFILE classch.qos.logback.core.rolling.RollingFileAppender filelogs/app.log/file rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy fileNamePatternlogs/app.%d{yyyy-MM-dd}.log/fileNamePattern maxHistory7/maxHistory /rollingPolicy encoder pattern${LOG_PATTERN}/pattern /encoder /appender !-- 开发环境 -- springProfile namedev logger namecom.example.demo levelDEBUG/ /springProfile !-- 生产环境 -- springProfile nameprod logger namecom.example.demo levelINFO/ /springProfile root levelINFO appender-ref refCONSOLE/ appender-ref refFILE/ /root /configuration四、代码中使用日志✅ 推荐Slf4jSlf4j Service public class OrderService { public void createOrder(Long userId, String orderId) { log.info(开始创建订单userId{}, orderId{}, userId, orderId); try { // 业务代码 } catch (Exception e) { log.error(订单创建失败userId{}, orderId{}, userId, orderId, e); throw e; } } }✅ 备选LoggerFactoryService public class OrderService { private static final Logger logger LoggerFactory.getLogger(OrderService.class); public void createOrder(Long userId, String orderId) { logger.info(开始创建订单userId{}, orderId{}, userId, orderId); } }两者关系Slf4j会在编译时自动生成LoggerFactory.getLogger()本质完全相同。五、多环境日志级别application-dev.ymllogging: level: com.example.demo: DEBUGapplication-prod.ymllogging: level: com.example.demo: INFO启动指定环境java -jar app.jar --spring.profiles.activeprod六、完整流程总结1️⃣ 理解日志级别 - TRACE / DEBUG / INFO / WARN / ERROR / FATAL 2️⃣ 确认日志依赖 - spring-boot-starter-logging默认已有 - lombok使用 Slf4j 时 3️⃣ application.yml - 控制台 - 文件 - 日志级别 4️⃣ logback-spring.xml - 控制台 文件 - 日志切割 - 多环境 5️⃣ 代码实现 - 推荐Slf4j - 备选LoggerFactory.getLogger() 6️⃣ 环境日志级别 - devDEBUG - prodINFO七、最终推荐方案Spring Boot 项目日志标准实践使用 Logback配置logback-spring.xml控制台 文件输出按天切割日志开发环境 DEBUG生产环境 INFO代码使用Slf4j