SLF4J记录日志&&日志文件的滚动策略__SpringBoot

Ashe / 2024-03-22 / 原文

Logback 是 Log4j 的作者的另一个开源日志组件,与 Log4j 相比,Logback 重新了内核,使它的性能提升了很多,大约是 Log4j 的 10 倍,同时占用更小的内存,并且完整的实现了 SLF4J API 是你可以很方便的切换日志框架。

SpringBoot 默认集成了 Logback,可以开箱即用,对于中小型项目,个人更倾向于推荐使用 Logback。

使用示例

public class MyClass {

    private static final Logger logger = LoggerFactory.getLogger(MyClass.class);

    public void someMethod() {
        logger.info("This is an info log");
        logger.error("This is an error log");
    }

}

在 src/main/resources 目录下创建一个名为 logback.xml 或 logback-spring.xml 的文件,并在其中定义滚动策略

<configuration>
    <appender name="fileAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--
            ${LOG_PATH:logs} 这样的配置使用了 Spring Boot 的属性占位符语法。
            这个语法的含义是,如果存在名为 LOG_PATH 的环境变量,则使用该环境变量的值作为日志路径;
            如果不存在 LOG_PATH 环境变量,则使用默认值 logs。
            在 Spring Boot 中,如果没有显式地为属性指定值,那么会使用默认值。
            在这个例子中,默认值为 logs,所以如果没有在其他地方显式地设置 LOG_PATH 环境变量,
            日志文件将会被放置在项目根路径下的 logs 文件夹中。
        -->
        <!-- 日志文件名 -->
        <file>${LOG_PATH:logs}/${LOG_FILE:application_name}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 触发滚动策略时重命名格式 -->
            <fileNamePattern>${LOG_PATH:logs}/${LOG_FILE:myapplication}-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <!-- 日志文件保留的最大数量 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <!-- 日志输出格式 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="fileAppender" />
    </root>
</configuration>