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 配置文件中调整日志输出级别和文件滚动策略等配置,以满足项目需求。
注意:
- 使用
@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 项目中配置日志,将指定内容的日志输出到指定文件中,并设置定时清理过期日志。
原文地址: https://www.cveoy.top/t/topic/mt8m 著作权归作者所有。请勿转载和采集!