zoukankan      html  css  js  c++  java
  • 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

     
  • 相关阅读:
    Code-Helper:RegexHelper.cs
    Code-Convert:Image to base64
    un-System.Reflection.IReflect.cs
    System.Reflection.AssemblyName.cs
    System.Reflection.ConstructorInfo.cs
    System.Attribute.cs
    ERROR<53761>
    /dev/null 文件
    linux telnet服务安装与配置
    linux定时任务2-at命令
  • 原文地址:https://www.cnblogs.com/maguanyue/p/13810215.html
Copyright © 2011-2022 走看看