#SpringBoot 日志配置完整文档(SLF4J + Logback + Druid适配)
一、前言本文档详细说明 SpringBoot 项目中「SLF4J Logback」日志框架的完整配置包含 Maven 依赖、application.yml 日志级别配置、logback-spring.xml 完整配置重点覆盖日志路径相对/绝对、日志格式、日志级别、开发/生产环境差异化配置同时适配 Druid 连接池日志输出确保日志可落地、可排查如 Druid 连接泄露、连接池满等日志。核心说明SpringBoot 默认集成「spring-boot-starter-logging」内置 SLF4J日志门面和 Logback日志实现无需额外引入日志核心依赖仅需补充 Druid 相关适配配置即可。二、Maven 依赖配置必配核心依赖仅需引入 SpringBoot 基础 starter自带日志和 Druid starter适配 Druid 日志无需额外添加 SLF4J/Logback 依赖避免版本冲突。2.1 完整依赖代码复制即用!-- SpringBoot 基础 starter自带 slf4j logback --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactId/dependency!-- SpringBoot Web 依赖若有Web场景否则可省略 --dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependency!-- Druid 连接池 starter适配 Druid 日志输出 --dependencygroupIdcom.alibaba/groupIdartifactIddruid-spring-boot-starter/artifactIdversion1.2.20/version/dependency!-- MySQL 驱动Druid 依赖必配 --dependencygroupIdcom.mysql/groupIdartifactIdmysql-connector-j/artifactIdscoperuntime/scope/dependency2.2 依赖说明spring-boot-starter内置 spring-boot-starter-logging包含 SLF4J 门面、Logback 实现无需额外引入。druid-spring-boot-starterDruid 连接池 starter自带 SLF4J 日志适配需配合 logback 配置输出 Druid 相关日志连接获取、泄露、超时等。mysql-connector-jMySQL 驱动Druid 连接数据库必需避免版本过低导致连接异常。禁止额外引入 log4j、logback-core 等依赖避免版本冲突SpringBoot 默认版本已适配。三、application.yml 日志配置核心日志级别application.yml 中仅配置「日志级别」日志的路径、格式、切割规则等全部交给 logback-spring.xml 管理避免配置冲突。3.1 完整配置代码复制即用spring:datasource:# 驱动url:jdbc:mysql://localhost:3306/contract_template_system?useUnicodetruecharacterEncodingutf8useSSLfalseserverTimezoneAsia/Shanghaiusername:rootpassword:123456# Druid 连接池核心配置 type:com.alibaba.druid.pool.DruidDataSourcedruid:# 核心连接数initial-size:5min-idle:5max-active:20# 最大连接数线上配置max-wait:2000# 获取连接超时2秒抛出GetJdbcConnectionTimeout# 连接检测配置validation-query:SELECT 1test-while-idle:truetest-on-borrow:falsetest-on-return:false# 空闲连接清理time-between-eviction-runs-millis:5000min-evictable-idle-time-millis:60000# 连接泄露防护必开 remove-abandoned:true# 开启连接泄露自动回收remove-abandoned-timeout:30# 超过30秒未释放强制回收log-abandoned:true# 打印连接泄露日志排查神器# Druid 监控页面 stat-view-servlet:enabled:trueurl-pattern:/druid/*login-username:adminlogin-password:admin123# 监控过滤必须包含 slf4j适配日志输出filters:stat,wall,slf4jweb-stat-filter:enabled:trueservlet:multipart:max-file-size:10MBmax-request-size:10MBmybatis:mapper-locations:classpath:mapper/*.xmltype-aliases-package:com.contract.entityconfiguration:log-impl:org.apache.ibatis.logging.stdout.StdOutImpl# MyBatis SQL 日志可选也可通过logback配置jwt:secret:your-secret-key-change-in-productionexpiration:86400000server:port:8083# 日志级别配置核心交给 logback 管理文件输出 logging:level:# 1. Druid 连接池日志必开 DEBUG排查连接问题com.alibaba.druid:DEBUGcom.alibaba.druid.pool.DruidDataSource:DEBUGcom.alibaba.druid.filter.slf4j:DEBUG# 2. 项目自身日志根据需求调整开发可设 DEBUG生产设 INFOcom.contract:INFO# 你的项目包名替换成自己的# 3. Spring 相关日志可选按需调整org.springframework:INFOorg.springframework.jdbc:DEBUG# Spring JDBC 日志排查数据库操作# 4. MyBatis 日志可选打印 SQL 语句org.mybatis:DEBUGmapper:DEBUG# MyBatis mapper 接口日志# 5. 根日志默认 INFO避免日志过多root:INFO3.2 关键配置说明重点3.2.1 日志级别优先级包级别 根级别日志级别从低到高TRACE DEBUG INFO WARN ERROR FATAL级别越高输出的日志越少。com.alibaba.druid: DEBUG必须设为 DEBUG才能输出 Druid 连接获取、释放、泄露、超时等关键日志用于排查连接池问题。com.contract: INFO项目自身包的日志级别开发环境可设为 DEBUG方便调试生产环境设为 INFO减少日志量。org.mybatis: DEBUG打印 MyBatis 执行的 SQL 语句、参数、结果开发环境可开生产环境建议关闭设为 INFO避免泄露敏感数据。root: INFO根日志级别默认 INFO避免低级别日志TRACE/DEBUG过多占用磁盘空间。3.2.2 注意事项禁止在 application.yml 中配置 logging.file、logging.logback.rollingpolicy 等参数如日志路径、切割规则否则会与 logback-spring.xml 冲突导致日志输出异常。Druid 的 filters 必须包含 slf4j否则 Druid 日志无法通过 Logback 输出到文件/控制台。MyBatis 的 log-impl 配置stdout.StdOutImpl是可选的若开启SQL 日志会打印到控制台若关闭可通过 logback 配置统一输出到文件。四、logback-spring.xml 配置核心日志输出管理logback-spring.xml 是日志配置的核心文件负责管理日志输出目的地控制台/文件、日志路径相对/绝对、日志格式、日志切割、日志保留天数等放在项目 resources 目录下src/main/resources/logback-spring.xml。4.1 完整配置代码通用版适配开发/生产?xml version1.0 encodingUTF-8?configuration!-- 1. 引入 SpringBoot 默认日志配置复用默认规则避免重复配置 --includeresourceorg/springframework/boot/logging/logback/defaults.xml/includeresourceorg/springframework/boot/logging/logback/console-appender.xml/!-- 2. 日志格式定义统一格式包含时间、线程、级别、类名、日志信息 --propertynameLOG_PATTERNvalue%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/!-- 日志编码避免中文乱码 --propertynameLOG_CHARSETvalueUTF-8/!-- 3. 日志路径配置核心相对路径/绝对路径可切换 --!-- 3.1 相对路径开发环境推荐日志存在项目根目录下的 logs 文件夹 --propertynameLOG_PATHvaluelogs/!-- 3.2 绝对路径生产环境推荐指定固定磁盘路径避免部署后路径混乱 --!-- property nameLOG_PATH valueD:/logs/contract-system/ --!-- property nameLOG_PATH value/home/app/logs/contract-system/ --!-- 4. 日志文件输出器核心所有日志写入文件按天切割 --appendernameFILEclassch.qos.logback.core.rolling.RollingFileAppender!-- 日志文件路径 文件名拼接 LOG_PATH 和 文件名 --file${LOG_PATH}/app.log/file!-- 日志滚动策略按天切割保留历史日志 --rollingPolicyclassch.qos.logback.core.rolling.TimeBasedRollingPolicy!-- 历史日志文件名格式按天命名如 app-2026-04-08.log --fileNamePattern${LOG_PATH}/app-%d{yyyy-MM-dd}.log/fileNamePattern!-- 历史日志保留天数生产环境建议保留30天开发环境可保留7天 --maxHistory15/maxHistory!-- 日志文件最大大小可选防止单个文件过大默认无限制 --totalSizeCap10GB/totalSizeCap/rollingPolicy!-- 日志格式和编码 --encoderpattern${LOG_PATTERN}/patterncharset${LOG_CHARSET}/charset/encoder!-- 日志过滤可选只输出 INFO 及以上级别日志到文件减少文件大小 --filterclassch.qos.logback.classic.filter.ThresholdFilterlevelINFO/level/filter/appender!-- 5. 错误日志单独输出可选方便排查错误建议开启 --appendernameERROR_FILEclassch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_PATH}/error.log/filerollingPolicyclassch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePattern${LOG_PATH}/error-%d{yyyy-MM-dd}.log/fileNamePatternmaxHistory30/maxHistorytotalSizeCap5GB/totalSizeCap/rollingPolicyencoderpattern${LOG_PATTERN}/patterncharset${LOG_CHARSET}/charset/encoder!-- 只输出 ERROR 级别日志 --filterclassch.qos.logback.classic.filter.LevelFilterlevelERROR/levelonMatchACCEPT/onMatchonMismatchDENY/onMismatch/filter/appender!-- 6. Druid 连接池日志单独输出可选方便单独排查连接问题 --appendernameDRUID_FILEclassch.qos.logback.core.rolling.RollingFileAppenderfile${LOG_PATH}/druid.log/filerollingPolicyclassch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePattern${LOG_PATH}/druid-%d{yyyy-MM-dd}.log/fileNamePatternmaxHistory30/maxHistory/rollingPolicyencoderpattern${LOG_PATTERN}/patterncharset${LOG_CHARSET}/charset/encoder/appender!-- 7. 根日志配置所有日志默认输出到控制台 文件 错误文件 --rootlevelINFOappender-refrefCONSOLE/!-- 控制台输出 --appender-refrefFILE/!-- 普通日志文件输出 --appender-refrefERROR_FILE/!-- 错误日志单独输出 --/root!-- 8. Druid 日志配置单独输出到 druid.log方便排查 --loggernamecom.alibaba.druidlevelDEBUGadditivityfalseappender-refrefCONSOLE/appender-refrefDRUID_FILE/appender-refrefERROR_FILE//loggerloggernamecom.alibaba.druid.filter.slf4jlevelDEBUGadditivityfalseappender-refrefCONSOLE/appender-refrefDRUID_FILE/appender-refrefERROR_FILE//logger!-- 9. MyBatis 日志配置可选单独输出 SQL 日志 --loggernameorg.mybatislevelDEBUGadditivityfalseappender-refrefCONSOLE/appender-refrefFILE//loggerloggernamemapperlevelDEBUGadditivityfalseappender-refrefCONSOLE/appender-refrefFILE//logger!-- 10. 项目自身日志可选单独输出项目相关日志 --loggernamecom.contractlevelINFOadditivityfalseappender-refrefCONSOLE/appender-refrefFILE/appender-refrefERROR_FILE//logger/configuration4.2 核心配置详解重点必看4.2.1 日志路径配置相对路径 vs 绝对路径日志路径通过 配置分两种场景按需切换1相对路径开发环境推荐propertynameLOG_PATHvaluelogs/日志存放位置项目根目录 / logs 文件夹项目启动后自动创建 logs 文件夹示例优势开发时无需关心磁盘路径项目迁移后日志路径自动跟随项目方便调试。2绝对路径生产环境推荐// Windows 环境如服务器是 WindowspropertynameLOG_PATHvalueD:/logs/contract-system/// Linux / 服务器环境推荐统一日志存放目录propertynameLOG_PATHvalue/home/app/logs/contract-system/优势日志存放位置固定避免部署后日志散落在项目目录方便运维人员统一管理、备份日志。注意绝对路径需确保服务器对应目录存在且项目有读写权限如 Linux 需给 /home/app/logs 目录赋予 755 权限。4.2.2 日志格式配置propertynameLOG_PATTERNvalue%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n/格式说明每部分含义%d{yyyy-MM-dd HH:mm:ss.SSS}日志时间精确到毫秒如 2026-04-08 14:30:00.123。[%thread]当前线程名方便排查多线程问题如 Druid 连接池并发问题。%-5level日志级别左对齐占5位如 DEBUG、INFO、ERROR。%logger{50}日志所属类的全限定名截取前50
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2498865.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!