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配置文件中调整日志输出级别和文件滚动策略等配置,以满足项目需求。

如何设置Springboot项目的日志将指定内容的日志输出到指定文件中并定时清理

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

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