logback.xml 是 Logback 框架默认 XML 配置文件,必须置于 src/main/resources/ 下,按 logback-test.xml → logback.xml → logback.groovy 顺序加载,文件名大小写敏感,配置错误将静默降级为控制台输出。

logback.xml 是 Logback 框架的默认 XML 格式配置文件,用于定义日志输出格式、级别、目的地(如控制台、文件)、滚动策略等。它不依赖外部注解或代码,启动时由 LoggerContext 自动加载,是 Java 应用(尤其 Spring Boot 项目)中最常用、最灵活的日志配置方式。
logback.xml 放在哪?类路径下必须是这个文件名
Logback 启动时按固定顺序查找配置文件:logback-test.xml → logback.xml → logback.groovy。生产环境通常用 logback.xml,且必须放在 src/main/resources/ 下(Maven/Gradle 默认类路径根目录)。如果放错位置(比如 src/main/java/ 或子目录),Logback 会回退到默认控制台输出,且控制台会打印警告:
WARN in ch.qos.logback.classic.LoggerContext[default] - No appenders present in context
- 文件名必须严格为
logback.xml(大小写敏感,不能叫Logback.xml或logback-config.xml) - Spring Boot 项目中,若同时存在
application.properties中的logging.config=...,优先以该配置为准 - 修改后需重启应用生效(Logback 默认不热重载 XML,除非显式启用
scan="true")
一个最小可用 logback.xml 长什么样
以下是最简但可运行的配置:定义一个控制台输出器(ConsoleAppender),绑定到 root logger,并设置日志级别为 INFO:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<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>
<p><root level="INFO">
<appender-ref ref="CONSOLE"/>
</root>
</configuration>-
<appender>定义日志“去哪”,class属性必须是完整类名,如ch.qos.logback.core.ConsoleAppender或ch.qos.logback.core.rolling.RollingFileAppender -
<encoder>决定“长啥样”,<pattern>里的占位符如%d、%level、%msg是固定语法,不可拼错 -
<root>是所有 logger 的默认父节点;单独的<logger name="com.example.service" level="DEBUG">可覆盖特定包日志级别
常见需求:输出到文件并按天滚动
用 RollingFileAppender 替代 ConsoleAppender,配合 TimeBasedRollingPolicy 实现按天归档(如 app.log + app.log.2024-04-01):
<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.log.%d{yyyy-MM-dd}</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>-
<file>指定当前活跃日志文件路径,目录(如logs/)需存在或由应用有写权限创建 -
<fileNamePattern>中的%d{...}格式必须与TimeBasedRollingPolicy兼容,否则滚动失败且无报错提示 -
<maxHistory>控制保留多少天的历史文件,单位是“天”,不是文件个数 - 若要同时输出到控制台和文件,需在
<root>中添加两个<appender-ref>,分别引用CONSOLE和FILE
容易被忽略的坑:异步日志、变量替换、profile 活性切换
实际项目中,直接写死路径或级别很快会不够用。Logback 提供了 <property>、<springProperty>(Spring Boot)、AsyncAppender 等机制,但配置稍有偏差就静默失效:
- 使用
<property name="LOG_PATH" value="logs"/>后,必须用${LOG_PATH}引用,不能写成$LOG_PATH或#{LOG_PATH} - Spring Boot 中推荐用
<springProperty scope="context" name="log.path" source="logging.path" defaultValue="logs"/>,这样可从application.yml统一管理路径 - 加
AsyncAppender提升性能时,必须把真正干活的 appender(如FILE)嵌套在<appender class="ch.qos.logback.classic.AsyncAppender">内部,再引用它 —— 不是把AsyncAppender当作顶层 appender 直接用 - Logback 本身不支持 profile(如
dev/prod),得靠 Spring Boot 的<springProfile name="prod">标签包裹配置块,且该标签仅在 Spring Boot 环境下有效
XML 格式看着简单,但缩进错误、标签未闭合、类名拼错、占位符大小写不对,都会导致 Logback 降级为默认配置——而它几乎不报错,只在启动日志里悄悄提示 “Ignoring configuration file”。真出问题时,先检查控制台有没有这类 WARN,再确认 XML 是否能被正确解析。










