Log4j2日志框架
概述
Log4j2组成部分
(1)日志信息的优先级:从低到高TRACE < DEBUG < INFO < WARN < ERROR < FATAL
日志信息 | 描述 |
---|---|
TRACE | 追踪,是最低的日志级别,相当于追踪程序的执行 |
DEBUG | 调试,一般在开发中,将其设置为最低的日志级别 |
INFO | 信息,输出重要的信息,使用较多 |
WARN | 警告,输出警告信息 |
ERROR | 输出错误信息 |
FATAL | 严重错误 |
这些级别分别用来指定这条日志信息的重要程度,级别高的会自动屏蔽级别低的日志。
(2)日志信息的输出目的地:日志信息的输出目的地指定了日志将打印在控制台还是文件中。
(3)日志信息的输出格式:该格式控制了日志信息的显示内容
使用步骤
1、导入Log4j2依赖
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.20.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j2-impl</artifactId>
<version>2.20.0</version>
</dependency>
2、加入日志配置文件
在类的根路径下提供log4j2.xml配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<configuration status="WARN" monitorInterval="30">
<!--先定义所有的appender-->
<appenders>
<!--这个输出控制台的配置-->
<console name="Console" target="SYSTEM_OUT">
<!--输出日志的格式-->
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
</console>
<!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
<File name="log" fileName="logs/test.log" append="false">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
<RollingFile name="RollingFileInfo" fileName="logs/info.log"
filePattern="logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<filters>
<!--不包含-->
<ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
<!--包含-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</filters>
</RollingFile>
<RollingFile name="RollingFileWarn" fileName="logs/warn.log"
filePattern="logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
<DefaultRolloverStrategy max="20"/>
<filters>
<!--不包含-->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<!--包含-->
<ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
</filters>
</RollingFile>
<RollingFile name="RollingFileError" fileName="logs/error.log"
filePattern="logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
</RollingFile>
</appenders>
<!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
<loggers>
<root level="ALL">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileWarn"/>
<appender-ref ref="RollingFileError"/>
</root>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.springframework" level="INFO" additivity="false">
<appender-ref ref="Console"/>
<appender-ref ref="RollingFileInfo"/>
</logger>
<logger name="org.mybatis" level="INFO"></logger>
</loggers>
</configuration>
3、测试
//测试
logger.info("测试成功");
/*[2023-06-22 10:18:36:763] [INFO] - com.louis.TestUser.test(TestUser.java:27) - 测试成功*/