基础使用
依赖
<!--slf4j 核心依赖-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- logback依赖 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
导包
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Test
public void test01(){
Logger logger = LoggerFactory.getLogger(LOGBACKTest.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
输出结果:logback默认输出格式
11:21:36.810 [main] ERROR com.xc.mylog.LOGBACKTest - error信息
11:21:36.812 [main] WARN com.xc.mylog.LOGBACKTest - warn信息
11:21:36.812 [main] INFO com.xc.mylog.LOGBACKTest - info信息
11:21:36.812 [main] DEBUG com.xc.mylog.LOGBACKTest - debug信息
Process finished with exit code 0
使用logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--通用格式配置-->
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m%n"/>
<!-- 配置文件的输出路径 -->
<property name="logDir" value="D://test"/>
<!-- 配置文件的appender 普通文件-->
<appender name="fileAppender" class="ch.qos.logback.core.FileAppender">
<!-- 引入文件位置 -->
<file>${logDir}/logback.log</file>
<!-- 配置日志输出格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式引用通用属性配置 -->
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 配置控制台appender -->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<!--默认:System.out 表示以黑色字体输出日志-->
<!--设置:System.err 表示以红色字体输出日志-->
<target>
System.err
</target>
<!--配置日志输出格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式引用通用属性配置 -->
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!--
日志记录器
配置root logger
level:配置日志级别
可以同时配置多个appender,做日志的多方向输出
-->
<root level="ALL">
<!-- 引入控制台appender -->
<appender-ref ref="consoleAppender"/>
<!-- 引入普通文件appender -->
<appender-ref ref="fileAppender"/>
</root>
</configuration>
@Test
public void test02(){
Logger logger = LoggerFactory.getLogger(LOGBACKTest.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
输出结果:
[ERROR] 2022-06-26 20:26:07.401 com.xc.mylog.LOGBACKTest test01 24 main error信息
[WARN ] 2022-06-26 20:26:07.403 com.xc.mylog.LOGBACKTest test01 25 main warn信息
[INFO ] 2022-06-26 20:26:07.404 com.xc.mylog.LOGBACKTest test01 26 main info信息
[DEBUG] 2022-06-26 20:26:07.404 com.xc.mylog.LOGBACKTest test01 27 main debug信息
[TRACE] 2022-06-26 20:26:07.404 com.xc.mylog.LOGBACKTest test01 28 main trace信息
Process finished with exit code 0
执行两次查看文件输出内容:

日志拆分和归档压缩
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--通用格式配置-->
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m%n"/>
<!-- 配置文件的输出路径 -->
<property name="logDir" value="D://test"/>
<!-- 配置文件的appender 可拆分归档的文件 -->
<appender name="roll" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 输入格式 -->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
<!--文件输出位置 -->
<file>${logDir}/roll_logback.log</file>
<!-- 指定拆分规则 -->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<!-- 按照时间和压缩格式声明文件名 压缩格式gz -->
<fileNamePattern>${logDir}/roll.%d{yyyy-MM-dd}.log%i.gz</fileNamePattern>
<!-- 按照文件大小来进行拆分 -->
<maxFileSize>100KB</maxFileSize>
</rollingPolicy>
</appender>
<!--
日志记录器
配置root logger
level:配置日志级别
-->
<root level="ALL">
<!-- 引入appender -->
<appender-ref ref="roll"/>
</root>
</configuration>
@Test
public void test03(){
for (int i = 0; i < 1000; i++) {
Logger logger = LoggerFactory.getLogger(LOGBACKTest.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
}
26日,27日分别执行一次,文件拆分输出结果:

当前日志为roll_bogback.log,当日志文件超过100k或者切换日期则会压缩成日期格式gz
日志进行更细粒度的打印控制
logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--通用格式配置-->
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m%n"/>
<!-- 配置控制台的appender 使用过滤器 -->
<appender name="consoleFilterAppender" class="ch.qos.logback.core.ConsoleAppender">
<target>
System.err
</target>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
<!-- 配置过滤器 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<!-- 设置日志的输出级别 -->
<level>ERROR</level>
<!-- 高于level中设置的级别,则打印日志 -->
<onMatch>ACCEPT</onMatch>
<!-- 低于level中设置的级别,则屏蔽日志 -->
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--
日志记录器
配置root logger
level:配置日志级别
-->
<root level="ALL">
<!-- 引入appender -->
<appender-ref ref="consoleFilterAppender"/>
</root>
</configuration>
@Test
public void test04(){
Logger logger = LoggerFactory.getLogger(LOGBACKTest.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
输出结果:
[ERROR] 2022-06-26 22:43:54.133 com.xc.mylog.LOGBACKTest test06 148 main error信息
Process finished with exit code 0
自定义logger
additivity=“false” 表示不继承rootlogger
<logger name="com.xc" level="info" additivity="false">
<!-- 在自定义logger中配置appender -->
<appender-ref ref="consoleAppender"/>
</logger>
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--通用格式配置-->
<property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L %thread %m%n"/>
<!-- 配置控制台appender -->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<!--默认:System.out 表示以黑色字体输出日志-->
<!--设置:System.err 表示以红色字体输出日志-->
<target>
System.err
</target>
<!--配置日志输出格式-->
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!-- 格式引用通用属性配置 -->
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!--配置异步日志-->
<appender name="asyncAppender" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="consoleAppender"/>
</appender>
<!--日志记录器-->
<root level="ALL">
<appender-ref ref="asyncAppender"/>
</root>
</configuration>
@Test
public void test05(){
Logger logger = LoggerFactory.getLogger(LOGBACKTest.class);
//日志打印操作
for (int i = 0; i < 100; i++) {
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
//系统本身业务相关的其他操作
System.out.println("1----------------------");
System.out.println("2----------------------");
System.out.println("3----------------------");
System.out.println("4----------------------");
System.out.println("5----------------------");
}
输出结果:日志和业务代码交替执行
[ERROR] 2022-06-26 22:56:29.948 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.949 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
1----------------------
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
2----------------------
3----------------------
4----------------------
5----------------------
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
[WARN ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main warn信息
[INFO ] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main info信息
[DEBUG] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main debug信息
[TRACE] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main trace信息
[ERROR] 2022-06-26 22:56:29.950 com.xc.mylog.LOGBACKTest ? ? main error信息
Process finished with exit code 0
性能提升
自动重新加载配置
高级过滤
无垃圾机制
基础使用
依赖
<!-- log4j2日志门面 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.12.1</version>
</dependency>
<!-- log4j2日志实现 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
</dependency>
导包
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@Test
public void test01(){
Logger logger = LogManager.getLogger(Log4j2Test.class);
logger.fatal("fatal信息");
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
输出结果:
//警告
//表示我们还没有建立自己的配置文件,如果没有建立配置文件,则使用默认的配置
ERROR StatusLogger No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
20:32:32.558 [main] FATAL com.xc.mylog.Log4j2Test - fatal信息
20:32:32.561 [main] ERROR com.xc.mylog.Log4j2Test - error信息
Process finished with exit code 0
基础配置文件使用
默认路径:resources/log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!-- 配置appender -->
<Appenders>
<!-- 配置控制台输出 -->
<Console name="consoleAppender" target="SYSTEM_OUT"/>
</Appenders>
<!-- 配置logger -->
<Loggers>
<!-- 配置rootlogger -->
<Root level="trace">
<!-- 引用Appender -->
<AppenderRef ref="consoleAppender"/>
</Root>
</Loggers>
</Configuration>
@Test
public void test02(){
Logger logger = LogManager.getLogger(Log4j2Test.class);
logger.fatal("fatal信息");
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
输出结果:
fatal信息
error信息
warn信息
info信息
debug信息
trace信息
Process finished with exit code 0
当今市场上的最强大,最主流的日志使用搭配方式:slf4j+log4j2
依赖
<!-- slf4j日志门面 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- log4j适配器 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.12.1</version>
</dependency>
<!-- log4j2日志门面 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.12.1</version>
</dependency>
<!-- log4j2日志实现 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.12.1</version>
</dependency>
导包
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!-- 配置appender -->
<Appenders>
<!-- 配置控制台输出 -->
<Console name="consoleAppender" target="SYSTEM_OUT"/>
</Appenders>
<!-- 配置logger -->
<Loggers>
<!-- 配置rootlogger -->
<Root level="trace">
<!-- 引用Appender -->
<AppenderRef ref="consoleAppender"/>
</Root>
</Loggers>
</Configuration>
@Test
public void test03(){
Logger logger = LoggerFactory.getLogger(Log4j2Test.class);
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
输出结果:
error信息
warn信息
info信息
debug信息
trace信息
Process finished with exit code 0
日志拆分
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<!--配置全局通用属性-->
<properties>
<property name="logDir">D://test</property>
</properties>
<!-- 配置appender -->
<Appenders>
<!--
按照指定规则来拆分日志文件
fileName:日志文件的名字
filePattern:日志文件拆分后文件的命名规则
$${date:yyyy-MM-dd}:根据日期当天,创建一个文件夹
例如:2021-01-01这个文件夹中,记录当天的所有日志信息
(拆分出来的日志放在这个文件夹中)
2021-01-02这个文件夹中,记录当天的所有日志信息
(拆分出来的日志放在这个文件夹中)
rollog-%d{yyyy-MM-dd-HH-mm}-%i.log
为文件命名的规则:%i表示序号,从0开始,目的是为了让每一份文件名字不会重复
-->
<RollingFile name="rollingFile" fileName="${logDir}/rollog.log"
filePattern="${logDir}/$${date:yyyy-MM-dd}/rollog-%d{yyyy-MM-dd-HH-mm}-%i.log">
<!-- 日志消息格式 -->
<PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %m%n"/>
<Policies>
<!-- 在系统启动时,触发拆分规则,产生一个日志文件 -->
<OnStartupTriggeringPolicy/>
<!-- 按照文件的大小进行拆分 -->
<SizeBasedTriggeringPolicy size="10KB"/>
<!-- 按照时间节点进行拆分 拆分规则就是filePattern-->
<TimeBasedTriggeringPolicy/>
</Policies>
<!-- 在同一目录下,文件的个数限制,如果超出了设置的数值,则根据时间进行覆盖,新的覆盖旧的规则-->
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</Appenders>
<!-- 配置logger -->
<Loggers>
<!-- 配置rootlogger -->
<Root level="trace">
<!-- 引用Appender -->
<AppenderRef ref="rollingFile"/>
<AppenderRef ref="consoleAppender"/>
</Root>
</Loggers>
</Configuration>
@Test
public void test05(){
Logger logger = LoggerFactory.getLogger(Log4j2Test.class);
for (int i = 0; i < 2000; i++) {
logger.error("error信息");
logger.warn("warn信息");
logger.info("info信息");
logger.debug("debug信息");
logger.trace("trace信息");
}
}
输出文件结果:

