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

 
原文地址:https://www.cnblogs.com/maguanyue/p/13810215.html