为什么写这个呢因为我遇到了一个问题多个%d的问题日志文件要么不按照日期文件目录划分要么日志文件名字不变结果处理了好久原来是因为logback只会根据第一个%d去划分所以需要忽略前面的%d添加一个,aux很关键这样他就会忽略前面的按照后面的来滚动划分具体看实战案例以下是 基于Logback 1.5.12的logback.xml完整配置详解涵盖核心组件、常用场景和该版本的注意事项。实战案例及其简略的案例可以生产直接使用?xml version1.0 encodingutf-8? configuration contextNamecom.cmit/contextName property namepattern value%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L -[%X{TRACE_ID}] - %msg %n/ property nameLOG_HOME valuelogs/ property namePROJECT_NAME valueproject-name/ property nameMAX_FILE_SIZE value10MB / property nameMAX_HISTORY value200 / !-- 控制台输出 -- appender nameCONSOLE classch.qos.logback.core.ConsoleAppender encoder classch.qos.logback.classic.encoder.PatternLayoutEncoder pattern${pattern}/pattern /encoder /appender !-- 文件输出 -- appender nameFILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_HOME}/${PROJECT_NAME}.log/file rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy fileNamePattern${LOG_HOME}/%d{yyyy-MM,aux}/${PROJECT_NAME}/${PROJECT_NAME}-%d{yyyy-MM-dd}-%i.log.gz/fileNamePattern maxFileSize${MAX_FILE_SIZE}/maxFileSize maxHistory${MAX_HISTORY}/maxHistory cleanHistoryOnStarttrue/cleanHistoryOnStart /rollingPolicy encoder pattern${pattern}/pattern /encoder /appender root levelINFO appender-ref refCONSOLE/ appender-ref refFILE/ /root /configuration文件基础结构?xml version1.0 encodingUTF-8? configuration !-- 属性定义 -- property nameLOG_HOME value./logs/ property nameAPP_NAME valuemyapp/ !-- Appender 定义 -- appender nameCONSOLE classch.qos.logback.core.ConsoleAppender ... /appender !-- Logger 定义 -- logger namecom.example levelDEBUG/ !-- 根 Logger -- root levelINFO appender-ref refCONSOLE/ /root /configuration核心组件详解configuration根标签属性属性说明示例scan是否自动扫描配置文件变更scantruescanPeriod扫描间隔默认 60 秒scanPeriod30 secondsdebug是否打印 logback 内部状态debugfalseconfiguration scantrue scanPeriod30 seconds debugfalseproperty属性定义!-- 直接定义 -- property nameLOG_PATH value/var/log/myapp/ !-- 引用系统属性 -- property nameLOG_PATH value${user.home}/logs/ !-- 默认值语法属性不存在时使用默认值 -- property nameLOG_LEVEL value${LOG_LEVEL:-INFO}/Appender 详解ConsoleAppender控制台输出appender nameCONSOLE classch.qos.logback.core.ConsoleAppender !-- 日志立即刷新性能会略降但确保不丢失 -- immediateFlushtrue/immediateFlush !-- 编码器 -- encoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern charsetUTF-8/charset /encoder !-- 过滤器只输出 INFO 及以上 -- filter classch.qos.logback.classic.filter.ThresholdFilter levelINFO/level /filter /appender常用 Pattern 符号符号含义%d{...}日期时间%thread线程名%-5level日志级别左对齐占5字符%logger{36}Logger 名最长36字符%msg/%m日志消息%n换行%line/%L输出代码行号性能开销大生产慎用%M方法名性能开销大FileAppender单文件输出appender nameFILE classch.qos.logback.core.FileAppender file${LOG_HOME}/app.log/file appendtrue/append !-- true追加false覆盖 -- encoder pattern%d{yyyy-MM-dd HH:mm:ss} [%thread] %level %logger - %msg%n/pattern /encoder /appenderRollingFileAppender滚动日志⭐最常用appender nameROLLING_FILE classch.qos.logback.core.rolling.RollingFileAppender !-- 当前正在写入的文件 -- file${LOG_HOME}/app.log/file !-- 滚动策略 -- rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy !-- 归档文件名格式%d 触发按天滚动 -- fileNamePattern${LOG_HOME}/app.%d{yyyy-MM-dd}.log/fileNamePattern !-- 保留最近 30 天的归档日志 -- maxHistory30/maxHistory !-- 启动时清理超期日志 -- cleanHistoryOnStarttrue/cleanHistoryOnStart !-- 单个归档文件最大 100MBTimeBasedRollingPolicy 不支持需用 SizeAndTimeBasedRollingPolicy -- /rollingPolicy encoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern /encoder /appenderSizeAndTimeBasedRollingPolicy按时间和大小双重滚动⭐推荐appender nameROLLING_FILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_HOME}/app.log/file rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy !-- %i 是序号同一天内超过大小则递增 -- fileNamePattern${LOG_HOME}/app.%d{yyyy-MM-dd}.%i.log/fileNamePattern !-- 单个文件最大 100MB -- maxFileSize100MB/maxFileSize !-- 保留 30 天的日志 -- maxHistory30/maxHistory !-- 所有日志总大小上限防止磁盘满 -- totalSizeCap10GB/totalSizeCap !-- 启动时清理 -- cleanHistoryOnStarttrue/cleanHistoryOnStart /rollingPolicy encoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern /encoder /appender注意SizeAndTimeBasedRollingPolicy是TimeBasedRollingPolicy的子类功能更强大生产环境建议直接使用这个。Logger 层级配置!-- 设置特定包的日志级别 -- logger namecom.example.dao levelDEBUG additivityfalse appender-ref refCONSOLE/ appender-ref refROLLING_FILE/ /logger !-- Spring 框架日志 -- logger nameorg.springframework levelWARN/ logger nameorg.springframework.jdbc levelDEBUG/ !-- MyBatis 日志 -- logger namecom.ibatis levelDEBUG/ logger namejava.sql levelDEBUG/ !-- 根 Logger所有日志的默认配置 -- root levelINFO appender-ref refCONSOLE/ appender-ref refROLLING_FILE/ /rootadditivityfalse的重要性true默认日志会同时输出到当前 logger 的 appender 和父 loggerroot的 appender导致重复打印false只输出到当前 logger 配置的 appender过滤器Filter!-- 级别过滤器精确匹配级别 -- filter classch.qos.logback.classic.filter.LevelFilter levelERROR/level onMatchACCEPT/onMatch onMismatchDENY/onMismatch /filter !-- 阈值过滤器该级别及以上通过 -- filter classch.qos.logback.classic.filter.ThresholdFilter levelWARN/level /filter高级配置异步日志AsyncAppender!-- 先定义同步 appender -- appender nameFILE_SYNC classch.qos.logback.core.rolling.RollingFileAppender file${LOG_HOME}/app.log/file rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy fileNamePattern${LOG_HOME}/app.%d{yyyy-MM-dd}.%i.log/fileNamePattern maxFileSize100MB/maxFileSize maxHistory30/maxHistory /rollingPolicy encoder pattern%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern /encoder /appender !-- 包装为异步 appender -- appender nameASYNC_FILE classch.qos.logback.classic.AsyncAppender !-- 队列大小默认 256 -- queueSize512/queueSize !-- 队列满时的策略false丢弃true阻塞 -- discardingThreshold0/discardingThreshold !-- 不丢失日志事件 -- neverBlockfalse/neverBlock !-- 引用同步 appender -- appender-ref refFILE_SYNC/ /appender root levelINFO appender-ref refASYNC_FILE/ /root按日志级别分离文件!-- INFO 及以上 -- appender nameINFO_FILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_HOME}/info.log/file rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy fileNamePattern${LOG_HOME}/info.%d{yyyy-MM-dd}.log/fileNamePattern maxHistory30/maxHistory /rollingPolicy filter classch.qos.logback.classic.filter.ThresholdFilter levelINFO/level /filter encoder pattern%d{yyyy-MM-dd HH:mm:ss} %level %logger - %msg%n/pattern /encoder /appender !-- 仅 ERROR -- appender nameERROR_FILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_HOME}/error.log/file rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy fileNamePattern${LOG_HOME}/error.%d{yyyy-MM-dd}.log/fileNamePattern maxHistory90/maxHistory /rollingPolicy filter classch.qos.logback.classic.filter.LevelFilter levelERROR/level onMatchACCEPT/onMatch onMismatchDENY/onMismatch /filter encoder pattern%d{yyyy-MM-dd HH:mm:ss} [%thread] %logger{36} - %msg%n%ex{full}/pattern /encoder /appender彩色控制台输出Logback 1.5.x 支持appender nameCONSOLE classch.qos.logback.core.ConsoleAppender encoder pattern%d{HH:mm:ss.SSS} %highlight(%-5level) %cyan(%logger{36}) - %msg%n/pattern /encoder /appender高亮颜色%highlight()根据级别自动着色ERROR红WARN黄INFO绿等%cyan()、%magenta()、%yellow()等Logback 1.5.x 版本注意事项安全性增强1.5.x 修复了CVE-2023-6378序列化漏洞等安全问题建议确保logback.xml中不要配置从 JNDI / 远程加载配置避免被利用maxHistory和cleanHistoryOnStart的行为maxHistory按归档文件的时间戳计算不是按文件创建时间cleanHistoryOnStarttrue只在应用启动时执行一次清理如果应用长期不重启超期文件不会被自动清理需依赖定时任务或确保会重启推荐的最小完整配置?xml version1.0 encodingUTF-8? configuration scantrue scanPeriod60 seconds debugfalse property nameLOG_HOME value${user.home}/logs/myapp/ property nameLOG_PATTERN value%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/ !-- 控制台 -- appender nameCONSOLE classch.qos.logback.core.ConsoleAppender encoder pattern%d{HH:mm:ss.SSS} %highlight(%-5level) %cyan(%logger{36}) - %msg%n/pattern charsetUTF-8/charset /encoder /appender !-- 文件滚动 -- appender nameFILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_HOME}/app.log/file rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy fileNamePattern${LOG_HOME}/app.%d{yyyy-MM-dd}.%i.log/fileNamePattern maxFileSize100MB/maxFileSize maxHistory30/maxHistory totalSizeCap5GB/totalSizeCap cleanHistoryOnStarttrue/cleanHistoryOnStart /rollingPolicy encoder pattern${LOG_PATTERN}/pattern charsetUTF-8/charset /encoder /appender !-- 第三方框架降噪 -- logger nameorg.springframework levelWARN/ logger nameorg.apache.http levelWARN/ logger namecom.zaxxer.hikari levelINFO/ root levelINFO appender-ref refCONSOLE/ appender-ref refFILE/ /root /configuration
logback实战详解fileNamePattern配置问题%d多级日期文件夹
发布时间:2026/7/2 4:38:58
为什么写这个呢因为我遇到了一个问题多个%d的问题日志文件要么不按照日期文件目录划分要么日志文件名字不变结果处理了好久原来是因为logback只会根据第一个%d去划分所以需要忽略前面的%d添加一个,aux很关键这样他就会忽略前面的按照后面的来滚动划分具体看实战案例以下是 基于Logback 1.5.12的logback.xml完整配置详解涵盖核心组件、常用场景和该版本的注意事项。实战案例及其简略的案例可以生产直接使用?xml version1.0 encodingutf-8? configuration contextNamecom.cmit/contextName property namepattern value%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}:%L -[%X{TRACE_ID}] - %msg %n/ property nameLOG_HOME valuelogs/ property namePROJECT_NAME valueproject-name/ property nameMAX_FILE_SIZE value10MB / property nameMAX_HISTORY value200 / !-- 控制台输出 -- appender nameCONSOLE classch.qos.logback.core.ConsoleAppender encoder classch.qos.logback.classic.encoder.PatternLayoutEncoder pattern${pattern}/pattern /encoder /appender !-- 文件输出 -- appender nameFILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_HOME}/${PROJECT_NAME}.log/file rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy fileNamePattern${LOG_HOME}/%d{yyyy-MM,aux}/${PROJECT_NAME}/${PROJECT_NAME}-%d{yyyy-MM-dd}-%i.log.gz/fileNamePattern maxFileSize${MAX_FILE_SIZE}/maxFileSize maxHistory${MAX_HISTORY}/maxHistory cleanHistoryOnStarttrue/cleanHistoryOnStart /rollingPolicy encoder pattern${pattern}/pattern /encoder /appender root levelINFO appender-ref refCONSOLE/ appender-ref refFILE/ /root /configuration文件基础结构?xml version1.0 encodingUTF-8? configuration !-- 属性定义 -- property nameLOG_HOME value./logs/ property nameAPP_NAME valuemyapp/ !-- Appender 定义 -- appender nameCONSOLE classch.qos.logback.core.ConsoleAppender ... /appender !-- Logger 定义 -- logger namecom.example levelDEBUG/ !-- 根 Logger -- root levelINFO appender-ref refCONSOLE/ /root /configuration核心组件详解configuration根标签属性属性说明示例scan是否自动扫描配置文件变更scantruescanPeriod扫描间隔默认 60 秒scanPeriod30 secondsdebug是否打印 logback 内部状态debugfalseconfiguration scantrue scanPeriod30 seconds debugfalseproperty属性定义!-- 直接定义 -- property nameLOG_PATH value/var/log/myapp/ !-- 引用系统属性 -- property nameLOG_PATH value${user.home}/logs/ !-- 默认值语法属性不存在时使用默认值 -- property nameLOG_LEVEL value${LOG_LEVEL:-INFO}/Appender 详解ConsoleAppender控制台输出appender nameCONSOLE classch.qos.logback.core.ConsoleAppender !-- 日志立即刷新性能会略降但确保不丢失 -- immediateFlushtrue/immediateFlush !-- 编码器 -- encoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern charsetUTF-8/charset /encoder !-- 过滤器只输出 INFO 及以上 -- filter classch.qos.logback.classic.filter.ThresholdFilter levelINFO/level /filter /appender常用 Pattern 符号符号含义%d{...}日期时间%thread线程名%-5level日志级别左对齐占5字符%logger{36}Logger 名最长36字符%msg/%m日志消息%n换行%line/%L输出代码行号性能开销大生产慎用%M方法名性能开销大FileAppender单文件输出appender nameFILE classch.qos.logback.core.FileAppender file${LOG_HOME}/app.log/file appendtrue/append !-- true追加false覆盖 -- encoder pattern%d{yyyy-MM-dd HH:mm:ss} [%thread] %level %logger - %msg%n/pattern /encoder /appenderRollingFileAppender滚动日志⭐最常用appender nameROLLING_FILE classch.qos.logback.core.rolling.RollingFileAppender !-- 当前正在写入的文件 -- file${LOG_HOME}/app.log/file !-- 滚动策略 -- rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy !-- 归档文件名格式%d 触发按天滚动 -- fileNamePattern${LOG_HOME}/app.%d{yyyy-MM-dd}.log/fileNamePattern !-- 保留最近 30 天的归档日志 -- maxHistory30/maxHistory !-- 启动时清理超期日志 -- cleanHistoryOnStarttrue/cleanHistoryOnStart !-- 单个归档文件最大 100MBTimeBasedRollingPolicy 不支持需用 SizeAndTimeBasedRollingPolicy -- /rollingPolicy encoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern /encoder /appenderSizeAndTimeBasedRollingPolicy按时间和大小双重滚动⭐推荐appender nameROLLING_FILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_HOME}/app.log/file rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy !-- %i 是序号同一天内超过大小则递增 -- fileNamePattern${LOG_HOME}/app.%d{yyyy-MM-dd}.%i.log/fileNamePattern !-- 单个文件最大 100MB -- maxFileSize100MB/maxFileSize !-- 保留 30 天的日志 -- maxHistory30/maxHistory !-- 所有日志总大小上限防止磁盘满 -- totalSizeCap10GB/totalSizeCap !-- 启动时清理 -- cleanHistoryOnStarttrue/cleanHistoryOnStart /rollingPolicy encoder pattern%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern /encoder /appender注意SizeAndTimeBasedRollingPolicy是TimeBasedRollingPolicy的子类功能更强大生产环境建议直接使用这个。Logger 层级配置!-- 设置特定包的日志级别 -- logger namecom.example.dao levelDEBUG additivityfalse appender-ref refCONSOLE/ appender-ref refROLLING_FILE/ /logger !-- Spring 框架日志 -- logger nameorg.springframework levelWARN/ logger nameorg.springframework.jdbc levelDEBUG/ !-- MyBatis 日志 -- logger namecom.ibatis levelDEBUG/ logger namejava.sql levelDEBUG/ !-- 根 Logger所有日志的默认配置 -- root levelINFO appender-ref refCONSOLE/ appender-ref refROLLING_FILE/ /rootadditivityfalse的重要性true默认日志会同时输出到当前 logger 的 appender 和父 loggerroot的 appender导致重复打印false只输出到当前 logger 配置的 appender过滤器Filter!-- 级别过滤器精确匹配级别 -- filter classch.qos.logback.classic.filter.LevelFilter levelERROR/level onMatchACCEPT/onMatch onMismatchDENY/onMismatch /filter !-- 阈值过滤器该级别及以上通过 -- filter classch.qos.logback.classic.filter.ThresholdFilter levelWARN/level /filter高级配置异步日志AsyncAppender!-- 先定义同步 appender -- appender nameFILE_SYNC classch.qos.logback.core.rolling.RollingFileAppender file${LOG_HOME}/app.log/file rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy fileNamePattern${LOG_HOME}/app.%d{yyyy-MM-dd}.%i.log/fileNamePattern maxFileSize100MB/maxFileSize maxHistory30/maxHistory /rollingPolicy encoder pattern%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/pattern /encoder /appender !-- 包装为异步 appender -- appender nameASYNC_FILE classch.qos.logback.classic.AsyncAppender !-- 队列大小默认 256 -- queueSize512/queueSize !-- 队列满时的策略false丢弃true阻塞 -- discardingThreshold0/discardingThreshold !-- 不丢失日志事件 -- neverBlockfalse/neverBlock !-- 引用同步 appender -- appender-ref refFILE_SYNC/ /appender root levelINFO appender-ref refASYNC_FILE/ /root按日志级别分离文件!-- INFO 及以上 -- appender nameINFO_FILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_HOME}/info.log/file rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy fileNamePattern${LOG_HOME}/info.%d{yyyy-MM-dd}.log/fileNamePattern maxHistory30/maxHistory /rollingPolicy filter classch.qos.logback.classic.filter.ThresholdFilter levelINFO/level /filter encoder pattern%d{yyyy-MM-dd HH:mm:ss} %level %logger - %msg%n/pattern /encoder /appender !-- 仅 ERROR -- appender nameERROR_FILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_HOME}/error.log/file rollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicy fileNamePattern${LOG_HOME}/error.%d{yyyy-MM-dd}.log/fileNamePattern maxHistory90/maxHistory /rollingPolicy filter classch.qos.logback.classic.filter.LevelFilter levelERROR/level onMatchACCEPT/onMatch onMismatchDENY/onMismatch /filter encoder pattern%d{yyyy-MM-dd HH:mm:ss} [%thread] %logger{36} - %msg%n%ex{full}/pattern /encoder /appender彩色控制台输出Logback 1.5.x 支持appender nameCONSOLE classch.qos.logback.core.ConsoleAppender encoder pattern%d{HH:mm:ss.SSS} %highlight(%-5level) %cyan(%logger{36}) - %msg%n/pattern /encoder /appender高亮颜色%highlight()根据级别自动着色ERROR红WARN黄INFO绿等%cyan()、%magenta()、%yellow()等Logback 1.5.x 版本注意事项安全性增强1.5.x 修复了CVE-2023-6378序列化漏洞等安全问题建议确保logback.xml中不要配置从 JNDI / 远程加载配置避免被利用maxHistory和cleanHistoryOnStart的行为maxHistory按归档文件的时间戳计算不是按文件创建时间cleanHistoryOnStarttrue只在应用启动时执行一次清理如果应用长期不重启超期文件不会被自动清理需依赖定时任务或确保会重启推荐的最小完整配置?xml version1.0 encodingUTF-8? configuration scantrue scanPeriod60 seconds debugfalse property nameLOG_HOME value${user.home}/logs/myapp/ property nameLOG_PATTERN value%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n/ !-- 控制台 -- appender nameCONSOLE classch.qos.logback.core.ConsoleAppender encoder pattern%d{HH:mm:ss.SSS} %highlight(%-5level) %cyan(%logger{36}) - %msg%n/pattern charsetUTF-8/charset /encoder /appender !-- 文件滚动 -- appender nameFILE classch.qos.logback.core.rolling.RollingFileAppender file${LOG_HOME}/app.log/file rollingPolicy classch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy fileNamePattern${LOG_HOME}/app.%d{yyyy-MM-dd}.%i.log/fileNamePattern maxFileSize100MB/maxFileSize maxHistory30/maxHistory totalSizeCap5GB/totalSizeCap cleanHistoryOnStarttrue/cleanHistoryOnStart /rollingPolicy encoder pattern${LOG_PATTERN}/pattern charsetUTF-8/charset /encoder /appender !-- 第三方框架降噪 -- logger nameorg.springframework levelWARN/ logger nameorg.apache.http levelWARN/ logger namecom.zaxxer.hikari levelINFO/ root levelINFO appender-ref refCONSOLE/ appender-ref refFILE/ /root /configuration