如何设置Springboot项目的日志将指定内容的日志输出到指定文件中并定时清理
- 添加相关依赖
在pom.xml中添加logback和logback-classic依赖,用于日志输出和配置
<!--logback日志相关依赖-->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
- 创建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指定保留的历史日志文件数量。
- 在项目中使用日志
在需要输出日志的地方,使用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("任务执行完成。");
}
}
- 定时清理日志文件
使用定时任务框架,如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天前,若是则删除该文件。
- 运行项目
以上配置完成后,运行Springboot项目即可开始输出日志到指定文件中,并定时清理过期的日志文件。可以在logback.xml配置文件中调整日志输出级别和文件滚动策略等配置,以满足项目需求。
原文地址: https://www.cveoy.top/t/topic/6lu 著作权归作者所有。请勿转载和采集!