前言
在开发中,比如一个系统每天都要执行添加商品信息、修改商品信息,如果我们使用日志去记录,按照上两篇的方式,是不是只能记录每次的记录并且是全部放到一个文件里面去记录的。那么日志滚动就可以设置把每天的记录都分开来记录,文件的名称可以设置为已日期格式,以每天每周每月的日期格式创建文件去记录相应的日志信息。
一、新建一个 Maven 项目,结构如下
1、添加依赖
<dependencies>
<!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.5</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
</dependency>
</dependencies>
2、在 resources 下,新建一个 logback.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
</encoder>
</appender>
<!-- 滚动日志,按照日期每天产生一个日志文件 -->
<!-- RollingFileAppender:这是一个按照一定日期生成滚动日志 -->
<appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 配置滚动策略,TimeBasedRollingPolicy:是比较常用的一种滚动策略
用于制定日期时间的日志文件
-->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 按照日期每天生成一个日志文件 -->
<fileNamePattern>ch03/logs/%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- 保存归档日志的最大数量,
这是设置为30天表示只保留最近30天的日志文件
-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<!-- 指定日志输出格式,与控制台的输出一样 -->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%t] %p %C - %m%n</pattern>
</encoder>
</appender>
<root level="debug">
<appender-ref ref="console"/>
<appender-ref ref="file"/>
</root>
</configuration>
RollingFileAppender:是以日期格式生成文件,可以避免单个文件过大的问题。
这只是一些简单的配置,还有其他的,比如果设置文件的大小, 超过这个大小怎么办、以什么形式去写这个日志文件。
1、<AppendToFile>true</AppendToFile>
以增量的方式添加,如果设置为 false 就是覆盖模式,每添加一次就覆盖之前的。
2、<MaximumFileSize>10MB</MaximumFileSize>设置单个文件的大小。
3、<MaxSizeRollBackups>10</MaxSizeRollBackups>
当文件大小超过 10MB 后,就会生成一个新的文件比如:2023-09-28.log.1,当生成到 2023-09-28.log.10 之后,再满的话就会覆盖第一个,重新开始记录。
二、新建一个 Main 类,输出日志信息
1、使用注解创建 log 对象
@Slf4j
public class Main {
public static void main(String[] args) {
log.trace("简单的日志输出");
log.debug("调试日志信息");
log.info("业务日志信息");
log.warn("警告日志信息");
log.error("错误日志信息");
}
}
同样使用注解去申明 log 对象。
2、测试运行结果
运行成功后,就会在 ch03/logs/ 下创建一个以日期生成的文件,不是设置为每天一个记录文件的吗?现在就把系统时间修改为明天,再去测试一下。
3、修改系统时间,继续测试
更改时间后,再次测试。
更改时间后,也可以添加新的日志,那就证明我们的配置是没有问题的,在做一些自动任务时就可以使用这个日志滚动,让程序自动去添加相应时间段的日志信息。并且还可以设置日志文件保存的时间,具体的使用还是需要相应的需求去实现。
三、gitee 案例
这门课程的完整案例我已经上传到 git 上了,地址:https://gitee.com/qiu-feng1/logback-study.git