1. 添加相关依赖

在 pom.xml 文件中添加 logback 和 logback-classic 依赖,用于日志输出和配置

<!--logback日志相关依赖-->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.2.3</version>
</dependency>
  1. 创建 logback.xml 配置文件

在 src/main/resources 目录下创建 logback.xml 文件,用于配置日志输出规则和文件路径。

示例 logback.xml 文件内容:

<configuration>

    <!--指定日志输出的根目录-->
    <property name="LOG_HOME" value="./logs"/>

    <!--指定日志输出的文件名-->
    <property name="LOG_FILENAME" value="myapp"/>

    <!--设置日志输出级别-->
    <root level="debug">
        <appender-ref ref="myAppender"/>
    </root>

    <!--定义日志输出规则,将info级别的日志输出到指定文件-->
    <appender name="myAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_HOME}/${LOG_FILENAME}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_FILENAME}-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

</configuration>

上述配置文件中,定义了日志输出的根目录和文件名,以及日志输出级别和输出规则。其中,rollingPolicy 标签用于设置日志文件的滚动策略,maxHistory 指定保留的历史日志文件数量。

  1. 在项目中使用日志

在需要输出日志的地方,使用 logback 提供的 Logger 类输出日志。

示例代码:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyService {

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

    public void doSomething() {
        logger.info('开始执行任务...');
        // 执行任务
        logger.info('任务执行完成。');
    }

}
  1. 定时清理日志文件

使用定时任务框架,如 Spring 的 @Scheduled 注解,定时清理过期的日志文件。可以在 Application 类中添加如下代码:

import org.springframework.scheduling.annotation.Scheduled;
import java.io.File;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

public class Application {

    // ...

    @Scheduled(cron = "0 0 0 * * ?")
    public void cleanLogs() {
        String logHome = "./logs";
        String logFilename = "myapp";
        LocalDate today = LocalDate.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
        String todayStr = formatter.format(today);
        File logDir = new File(logHome);
        if (!logDir.exists()) {
            return;
        }
        File[] logFiles = logDir.listFiles((dir, name) -> name.startsWith(logFilename) && name.endsWith(".log.gz"));
        if (logFiles != null) {
            for (File logFile : logFiles) {
                String filename = logFile.getName();
                String dateStr = filename.substring(logFilename.length() + 1, filename.length() - 8);
                LocalDate logDate = LocalDate.parse(dateStr, formatter);
                if (logDate.isBefore(today.minusDays(30))) {
                    logFile.delete();
                }
            }
        }
    }

}

上述代码中,使用 Java8 的 LocalDate 类和 DateTimeFormatter 类获取当前日期,然后遍历日志目录下的所有满足条件的日志文件,判断文件名中的日期是否早于 30 天前,若是则删除该文件。

  1. 运行项目

以上配置完成后,运行 Springboot 项目即可开始输出日志到指定文件中,并定时清理过期的日志文件。可以在 logback.xml 配置文件中调整日志输出级别和文件滚动策略等配置,以满足项目需求。

注意:

  • 使用 @Scheduled 注解的定时任务,需要在 Application 类上添加 @EnableScheduling 注解开启定时任务功能。
  • logback 配置文件路径可以根据实际项目情况进行调整。
  • 定时任务的执行时间可以根据实际需求进行修改。
  • 日志清理的策略可以根据实际情况进行调整,例如删除超过 30 天前的日志文件,或保留最近 10 个日志文件。
  • 在开发环境中,建议将日志输出级别设置为 DEBUG,以便方便调试问题。
  • 在生产环境中,建议将日志输出级别设置为 INFO 或 WARN,以减少日志文件的大小。

示例代码:

@SpringBootApplication
@EnableScheduling
public class Application {

    // ...

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Scheduled(cron = "0 0 0 * * ?")
    public void cleanLogs() {
        // 清理日志文件代码
    }
}

希望本文能够帮助你理解如何在 SpringBoot 项目中配置日志,将指定内容的日志输出到指定文件中,并设置定时清理过期日志。

SpringBoot 项目日志配置:指定内容输出、文件存储与定时清理

原文地址: https://www.cveoy.top/t/topic/mt8m 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录