关键在于配置RollingFileAppender配合TimeBasedRollingPolicy实现按天归档,用LevelFilter或ThresholdFilter按级别分流至不同文件,并通过<logger>标签为特定包设置独立级别,同时确保logback.xml置于src/main/resources下且无冲突配置。

在 Java 项目中,用 logback.xml 实现分级日志输出(如 DEBUG、INFO、WARN、ERROR)和自动文件归档(按天/大小滚动),关键在于合理配置 <appender> 和 <logger>,并启用 RollingFileAppender 及其策略。
配置 RollingFileAppender 实现按天归档
这是最常用的方式,每天生成一个新日志文件,旧文件自动压缩保留。
- 使用
RollingFileAppender,配合TimeBasedRollingPolicy按时间滚动 -
fileNamePattern定义归档文件名格式,支持%d{yyyy-MM-dd}占位符 -
maxHistory控制保留多少天的日志(例如 30 表示只留最近 30 天) - 设置
triggeringPolicy和rollingPolicy分离触发与归档逻辑(Logback 1.2+ 推荐写法)
示例片段:
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
按日志级别分流到不同文件
让 ERROR 日志单独存入 error.log,INFO 及以下进 info.log,需配合 LevelFilter 或 ThresholdFilter。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 为每个目标文件定义独立的
RollingFileAppender - 在 appender 内部用
LevelFilter精确匹配某一级别(如只接受 ERROR) - 或用
ThresholdFilter过滤“不低于”某级别的日志(如 INFO 级 appender 设level="INFO") - 注意:多个 appender 可同时绑定到同一个
<root>或不同<logger>
示例(ERROR 单独输出):
<appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>logs/error.log</file>
<filter class="ch.qos.logback.core.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/error.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>7</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
控制不同包/类的日志级别
避免全项目都打 DEBUG,可针对特定模块(如 MyBatis、Spring Boot 启动过程)调低级别。
- 用
<logger>标签指定name(通常是包名或类名),设置level -
additivity="false"防止日志重复输出(避免被 root logger 再次捕获) - 例如:
<logger name="com.example.service" level="DEBUG" /> - 第三方库常见配置:
<logger name="org.springframework.boot" level="WARN" />
确保配置生效的细节提醒
常见问题往往出在路径或加载顺序上。
-
logback.xml必须放在src/main/resources下(Maven 项目),否则不被自动发现 - 若存在
logback-spring.xml,Spring Boot 会优先加载它(支持profile激活) - 检查 classpath 中是否意外存在多个 logback 配置文件(可能导致覆盖)
- 启动时加
-Dlogback.debug=true可输出 Logback 加载过程,便于排查 - 确认依赖中没有冲突的 logging 实现(如同时引入 log4j-over-slf4j 但未排除)

















