本文纯个人读书笔记,书籍《一步一步学 Spring Boot 2》
如果喜欢,可直接购买书籍。如有侵权,请联系删除
一、Log4j
Log4j 是 Apache 的一个开源项目,通过使用 Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI 组件,甚至是套接口服务器、NT 的事件记录器、UNIX Syslog 守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
Log4j 中有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局),分别对应为日志类别,日志要输出的地方和日志以何种形式输出。
Log4J 原理如图:
Loggers(记录器): Loggers 组件被分为七个级别:all、debug、info、warn、error、fatal、off。用来指定日志信息的重要程度:all < debug < info < warn < error < fatal < off。Log4j 会输出级别不低于设定级别的所有日志信息。Log4j 允许开发人员定义多个 Logger,每个 Logger 拥有自己的名字,Logger 之间通过名字来表明隶属关系。
Appenders(输出源): Log4j 日志系统允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等等。
Layouts(布局): Layout 的作用是控制 Log 信息的输出方式,也就是格式化输出的信息。
二、集成 Log4j2
log4j2 是重构后的 log4j2,吸收了一些 logback 的设计。
1.引入依赖
在 pom 中引入 Log4j 的依赖。
pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
由于 Spring Boot 默认使用 Logback 日志框架来记录日志,所以在引入 Log4j2 同时,需要排除该包的依。
pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<!-- 排查Spring Boot默认日志 -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
2.添加配置
log4j 是通过一个 .properties 的文件作为主配置文件的,而 log4j 2 采用的是 .xml,.json 或者 .jsn 这种方式来做。
这边使用 xml 格式作为 Log4j 的配置文件(除了.xml 外,不同版本 log4j2 配置格式支持有所差异)。
我们需要在 application.properties 中进行配置。
application.properties :
###log4j配置
logging.config=classpath:log4j2.xml
配置之后,Spring Boot 会在 classpath 下面寻找 log4j2.xml 文件。
3.创建 log4j2.xml
在目录 /src/main/resources 目录下新建空的日志配置文件 log4j2.xml。
log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<appenders>
</appenders>
<loggers>
<root level="all">
</root>
</loggers>
</Configuration>
三、使用 Log4j2
1.控制台打印
这边实现控制台的日志打印,先在 log4j2.xml 配置文件添加相关的配置。
log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<!-- 指定日志的输出格式 -->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</Console>
</appenders>
<loggers>
<root level="all">
<!-- 控制台输出 -->
<appender-ref ref="Console"/>
</root>
</loggers>
</Configuration>
2.文件记录
实际生产环境中,我们的日志基本都是保存在日志文件中。在 log4j2.xml 指定对应的配置。
log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<!-- 设置日志输出的格式 -->
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</Console>
<RollingFile name="RollingFileInfo" fileName="D:/info.log"
filePattern="D:/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<Filters>
<ThresholdFilter level="INFO"/>
</Filters>
<PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
</appenders>
<loggers>
<root level="all">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
</root>
</loggers>
</Configuration>
3.测试
在 DemoApplication.java 中添加测试代码。
DemoApplication.java:
private Logger logger = LogManager.getLogger(this.getClass());
@Test
public void testLog4j(){
logger.info("Log4j2 测试!!!");
}
然后运行,查看结果。
控制台:
同时,在 D 盘下会生成 info.log 文件,查看该文件:
同样包含我们需要的日志。