Log4j2笔记
Apache Log4j 2是Log4j的升级版,对Log4j的前身Log4j 1.x进行了重大改进,并提供了Logback中可用的许多改进,在多线程方案中,与Log4j 1.x和Logback相比,异步Logger的吞吐量高18倍,延迟降低了几个数量级,简单来说就是更快,更强。在这里记录一下学习的相关笔记,方便查找。
Maven依赖
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.7</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.7</version> </dependency>
配置文件介绍
<?xml version="1.0" encoding="UTF-8"?> <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置--> <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数--> <configuration status="WARN" monitorInterval="30"> <!--先定义所有的appender--> <appenders> <!--输出到控制台--> <console name="Console" target="SYSTEM_OUT"> <!--输出日志的格式--> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%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> <!--文件滚动, 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档--> <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log" filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log"> <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)--> <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/> <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/> <Policies> <DefaultRolloverStrategy max="20"/> <!--文件夹下最多的文件个数--> <TimeBasedTriggeringPolicy interval="2 hour"/> <!--多长时间滚动一次--> <SizeBasedTriggeringPolicy size="100 MB"/> <!-- 一个日志文件的最大大小 --> </Policies> </RollingFile>
</appenders> <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效--> <loggers> <!--过滤掉spring和mybatis的一些无用的DEBUG信息--> <logger name="org.springframework" level="INFO"></logger> <logger name="org.mybatis" level="INFO"></logger> <root level="all"> <appender-ref ref="Console"/> <appender-ref ref="RollingFileInfo"/> <appender-ref ref="RollingFileWarn"/> <appender-ref ref="RollingFileError"/> </root> </loggers> </configuration>
相关知识点
1.log4j2默认会在classpath目录下寻找log4j.json、log4j.jsn、log4j2.xml等名称的文件,如果都没有找到,则会按默认配置输出,也就是输出到控制台。
2.log4j2.xml中,以Configuration为根节点,有一个status属性,这个属性表示log4j2本身的日志信息打印级别。注意,这个是log4j2本身的打印日志级别。如果把status改为TRACE,可以看到控制台中打印了一些log4j加载插件、组装logger等调试信息。
3.根节点Configuration有属性: monitorinterval,有两个子节点:Appenders和Loggers。
4.Appenders节点,常见的有三种子节点:Console、File、RollingFile 。
Console节点用来定义输出到控制台的Appender。
File节点用来定义输出到指定位置的文件的Appender。
RollingFile节点用来定义超过指定大小自动删除旧的创建新的的Appender。
5.Loggers节点,常见的有两种:Root和Logger。
Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出。
Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。
参考:http://www.voidcn.com/article/p-evaeecmd-bps.html
https://www.cnblogs.com/LemonFive/p/10737658.html