在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。

📖 一、Logback 日志格式解析

Logback 的格式化输出通过 PatternLayout 实现,通常在 logback.xml 文件中配置。其常用的日志格式由 %符号 开头,后面跟随格式化参数。

🧩 常见的 Logback 格式符

格式符说明示例
%d{yyyy-MM-dd HH:mm:ss}输出日志的时间戳,支持自定义格式2025-07-19 10:30:00
%level输出日志级别,如 INFODEBUGERRORINFO
%logger输出日志记录器的名称,通常是类名com.example.demo.MyClass
%thread输出日志的线程名称main
%msg输出日志消息This is a log message.
%M输出方法名methodName
%line输出日志的行号42
%n输出换行符(通常是 \n\n
%exception输出异常堆栈跟踪java.lang.NullPointerException

📜 二、Logback 配置文件(logback.xml)示例

Logback 配置通常放在项目的 src/main/resources 文件夹下,命名为 logback.xml。以下是一个基础的配置示例:

<configuration>

    <!-- 设置日志级别为 INFO -->
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>

    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- 定义日志输出格式 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 文件输出 -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>logs/application.log</file>
        <encoder>
            <!-- 日志文件格式 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

</configuration>

📌 解析:

  • <root level="INFO">:设置根日志级别为 INFO,表示 INFO 及更高级别的日志(如 WARNERROR)会被输出。
  • <appender-ref ref="CONSOLE"/>:将日志输出到控制台。
  • <appender-ref ref="FILE"/>:将日志输出到文件。
  • <pattern>:定义日志输出格式:
    • %d{yyyy-MM-dd HH:mm:ss}:时间戳,格式为 yyyy-MM-dd HH:mm:ss
    • %thread:线程名。
    • %-5level:日志级别,宽度为5。
    • %logger{36}:记录器名(通常是类名),限制长度为36字符。
    • %msg:日志消息。
    • %n:换行符。

🧳 三、常见配置项解释

1. 日志输出级别

  • TRACE:最低的日志级别,记录非常详细的信息,用于追踪程序执行过程。
  • DEBUG:开发环境下调试使用,记录调试信息。
  • INFO:常规日志,记录应用程序的运行状态,适用于正常运行时的日志。
  • WARN:警告信息,记录可能会导致错误的潜在问题。
  • ERROR:错误日志,记录程序出现问题时的信息。

2. 输出到控制台与文件

  • ConsoleAppender:输出日志到控制台,适用于开发环境。
  • FileAppender:输出日志到文件,适用于生产环境。
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>logs/application.log</file>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

3. 日志文件分割(RollingFileAppender)

当日志文件过大时,可以使用 RollingFileAppender 来控制日志文件的大小和切割,定期生成新日志文件。

<appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>logs/application.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
        <fileNamePattern>logs/application.%i.log</fileNamePattern>
        <minIndex>1</minIndex>
        <maxIndex>10</maxIndex>
    </rollingPolicy>
    <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
        <maxFileSize>10MB</maxFileSize>
    </triggeringPolicy>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
</appender>

4. 日志异步输出(AsyncAppender)

如果日志输出较为频繁,可以使用 AsyncAppender 进行异步输出,减少对应用性能的影响。

<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
    <appender-ref ref="FILE"/>
</appender>

💡 四、Spring Boot 集成 Logback

在 Spring Boot 项目中,Logback 的配置文件通常是 logback-spring.xml 或 logback.xml,位于 src/main/resources 目录下。如果你想在 Spring Boot 中使用自定义 Logback 配置,可以按如下方式:

logback-spring.xml 示例

<configuration>

    <property name="LOGS" value="./logs" />
    
    <!-- 日志输出到控制台 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 日志输出到文件 -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <file>${LOGS}/spring-boot.log</file>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- 根日志级别为 INFO -->
    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

</configuration>

需要注意的是,logback-spring.xml 文件允许在 Spring Boot 配置文件中读取 ${LOGS} 等变量,以便在不同环境下动态控制日志路径。


📜 五、更多 Logback 配置技巧

  1. 日志条件输出(Marker)通过 Marker 可以为日志添加标签,例如:@Loggable 或 @Debuggable<logger name="com.example.demo" level="DEBUG"> <appender-ref ref="STDOUT"/> </logger>
  2. 日志文件切割(Log Rotation)设置最大日志文件大小和备份文件数量,避免单个日志文件过大。<rollingPolicy class="ch.qos.logback.core.rolling.SizeBasedRollingPolicy"> <fileNamePattern>logs/myapp.%d{yyyy-MM-dd}.log</fileNamePattern> <maxFileSize>10MB</maxFileSize> </rollingPolicy>

🔚 总结

Logback 的配置通过 XML 文件进行管理,使用 % 格式符进行日志格式化配置。你可以根据项目需求设置不同的输出方式(控制台、文件、异步等),并且支持多种配置如日志文件切割、日志级别控制等。Spring Boot 集成 Logback 后,配置文件位于 src/main/resources,并且可以灵活自定义。

如果有任何具体问题,如如何配置日志文件大小或根据日志级别调整输出,可以进一步提供帮助!