Logback是SLF4J的原生实现,性能优异、配置灵活,核心配置文件为logback.xml(或logback-spring.xml),由appender(定义输出目的地)、logger(指定包/类日志级别与Appender)和root(全局默认Logger)三部分构成。

Logback 是 Slf4j 的原生实现,性能好、配置灵活,是 Java 项目中主流的日志框架。配置核心在于 logback.xml(或 logback-spring.xml)文件,控制日志级别、输出位置、格式和归档策略。
基础配置结构:appender + logger + root
一个典型配置包含三部分:
- appender:定义日志输出目的地(控制台、文件、远程等),可指定格式和过滤规则;
- logger:为特定包或类设置日志级别和关联的 appender(可不继承 root);
- root:全局默认 logger,必须配置,决定未显式声明的类的日志行为。
常用 appender 示例:控制台与文件输出
以下是最常见的两种 appender 配置片段:
<!-- 控制台输出(开发调试用)-->
立即学习“Java免费学习笔记(深入)”;
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender><!-- 按天滚动的文件输出(生产环境推荐)-->
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
<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>10MB</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>注意:SizeAndTimeBasedFNATP 支持“按天+按大小”双维度归档,%i 表示同一天内超限后的序号(如 app.2024-06-01.0.log)。
控制日志级别与路由:logger 和 root 协同使用
通过 logger 可精细化管理不同模块的日志量:
<!-- 关闭 Hibernate SQL 参数日志(减少干扰)--> <logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="WARN" /> <p><!-- 让自定义 service 包输出 DEBUG 级别 --> <logger name="com.example.myapp.service" level="DEBUG" additivity="false"> <appender-ref ref="FILE" /> </logger></p><p><!-- 根 logger:默认输出 INFO 及以上到 CONSOLE 和 FILE --> <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root>
additivity="false" 表示该 logger 不再向 root 传递日志,避免重复输出。
Spring Boot 中的增强用法:logback-spring.xml
在 Spring Boot 项目中,建议使用 logback-spring.xml,它支持 Spring Profile 条件化配置:
<springProfile name="dev">
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
</root>
</springProfile>
<p><springProfile name="prod">
<root level="WARN">
<appender-ref ref="FILE" />
</root>
</springProfile>这样无需改代码,仅靠 --spring.profiles.active=prod 就能切换日志行为。

















