Log4j2 笔记

maven中导入依赖

1
2
3
4
5
6
7
8
9
10
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.19.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
<version>2.19.0</version>
</dependency>

配置文件

一般maven项目放在resources目录下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<?xml version="1.0" encoding="UTF-8"?>
<!-- Log4j 2 configuration file. -->
<!--在Log4j 2的XML配置文件中,<Configuration status="WARN">这一行用于配置Log4j 2自身的日志级别。status属性设置的是Log4j 2内部事件的日志级别,这会影响Log4j 2在启动和运行时记录自身状态和内部信息的行为。-->
<Configuration status="WARN">
<!-- Appenders: 定义日志的输出目的地 -->
<Appenders>
<!-- Console Appender: 输出日志到控制台 -->
<Console name="Console" target="SYSTEM_OUT">
<!-- Pattern Layout: 定义日志的输出格式 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-3level %logger{36} - %msg%n"/>
</Console>

<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,适合临时测试用-->
<File name="log" fileName="log/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>

<!-- Rolling File Appender: 输出日志到文件,并具有分割功能 -->
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<!-- Pattern Layout: 定义日志的输出格式 -->
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
<!-- Policies: 定义触发日志分割的策略 -->
<Policies>
<!-- Size-Based Triggering Policy: 根据文件大小触发分割 -->
<SizeBasedTriggeringPolicy size="10 MB"/>
<!-- Time-Based Triggering Policy: 根据时间触发分割 -->
<TimeBasedTriggeringPolicy/>
</Policies>
<!-- 定义同一文件夹内最多多少个 -->
<DefaultRolloverStrategy max="20"/>
</RollingFile>
</Appenders>
<!-- Loggers: 定义日志记录器 -->
<Loggers>
<!-- Root Logger: 设置根日志记录器的级别和输出目的地 -->
<Root level="DEBUG">
<!-- 引用上面定义的 Appender -->
<AppenderRef ref="Console"/>
<AppenderRef ref="log"/>
<AppenderRef ref="RollingFile"/>
</Root>
</Loggers>
</Configuration>

手动添加日志

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorldTest {

// getLogger()参数必须是 类名.class
private Logger logger = LoggerFactory.getLogger(HelloWorldTest.class);

@Test
public void testHelloWorld(){
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
HelloWorld helloworld = (HelloWorld) ac.getBean("helloWorld");
helloworld.sayHello();

logger.info("执行成功");
}
}