Skip to content

Log4j2日志框架及其引入

Log4j2日志框架

日志信息的级别

从低到高的级别如下:

  • TRACE:追踪,最低级别,即追踪程序执行
  • DEBUG:调试,通常会设置为最低级别
  • INFO:信息,输出重要信息
  • WARN:警告,输出警告信息
  • ERROR:错误
  • FATAL:严重错误

设置日志级别后,会自动屏蔽更低的级别并不再输出

输出路径

LOG4j2框架可以规定日志输出在日志文件还是控制台中。

输出格式

LOG4j2可以定义日志的输出格式。

向项目引入LOG4j2日志框架

添加依赖

/pom.xml中添加依赖项。

1.修改原本的spring-boot-starter-webspring-boot-starter-test,在这个整合包里移除其中的日志模块

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

2.添加log4j2的依赖项。

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

<!-- 如果不需要强制指定特定版本(跟随 Spring Boot 默认版本即可),可以删除下面的内容-->
<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-bom</artifactId>
            <version>2.24.3</version>
            <type>pom</type>
        </dependency>

创建配置文件

/src/main/resources下创建log4j2.xml文件,并填写如下内容:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">

    <Properties>
        <Property name="LOG_PATH">./logs</Property>
        <Property name="APP_NAME">blog</Property>
        <Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %highlight{%-5level} %style{%logger{36}}{cyan} - %msg%n" disableAnsi="false" noConsoleNoAnsi="false"/>
        </Console>

        <RollingFile name="RollingFile" fileName="${LOG_PATH}/${APP_NAME}.log"
                     filePattern="${LOG_PATH}/$${date:yyyy-MM}/${APP_NAME}-%d{yyyy-MM-dd}-%i.log">

            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>

            <PatternLayout pattern="${LOG_PATTERN}" />

            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
            <DefaultRolloverStrategy max="20"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <Logger name="org.springframework" level="WARN"/>
        <Logger name="org.mybatis" level="WARN"/>

        <!-- 规定对于online.umbracore.blog下产生的日志,显示Debug及以上级别的日志信息 -->
        <Logger name="online.umbracore.blog" level="DEBUG" additivity="false">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Logger>

        <!-- 规定默认情况下,只显示INFO及以上的日志信息 -->
        <Root level="INFO">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Root>
    </Loggers>
</Configuration>

手动写入日志信息

创建Logger对象

logger对象类似于Canvas的上下文对象,通过调用方法写入日志到log文件和控制台。

1
2
3
//使用import org.slf4j下的Logger类
//参数为创建 的logger对象直接所属的类名,即在内部类的中,需要填写内部类的类名+.class
private Logger logger= LoggerFactory.getLogger(UserTest.class);

调用Logger对象

Logger提供了不同方法用于日志写入,参数均为写入的日志的消息。