(八)Spring Boot 集成 Log4j —— 《一步一步学 Spring Boot 2》读书笔记

本文纯个人读书笔记,书籍《一步一步学 Spring Boot 2》
如果喜欢,可直接购买书籍。如有侵权,请联系删除

一、Log4j

Log4j 是 Apache 的一个开源项目,通过使用 Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI 组件,甚至是套接口服务器、NT 的事件记录器、UNIX Syslog 守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。

Log4j 中有三个主要的组件:Loggers(记录器),Appenders (输出源)和Layouts(布局),分别对应为日志类别,日志要输出的地方和日志以何种形式输出。

Log4J 原理如图:
(八)Spring Boot 集成 Log4j —— 《一步一步学 Spring Boot 2》读书笔记

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 测试!!!");
    }

然后运行,查看结果。

控制台:
(八)Spring Boot 集成 Log4j —— 《一步一步学 Spring Boot 2》读书笔记
同时,在 D 盘下会生成 info.log 文件,查看该文件:
(八)Spring Boot 集成 Log4j —— 《一步一步学 Spring Boot 2》读书笔记
同样包含我们需要的日志。

上一篇:log4j2 按日期分割,自动清理历史文件


下一篇:通过Spring Log4jConfigurer初始化log4j2