zoukankan      html  css  js  c++  java
  • log4j2日志配置

    log4j2日志配置

    背景

      log4j2相对于log4j 1.x有了脱胎换骨的变化,其官网宣称的优势有多线程下10几倍于log4j 1.x和logback的高吞吐量、可配置的审计型日志、基于插件架构的各种灵活配置等。

    官方配置文档:http://logging.apache.org/log4j/2.x/manual/configuration.html

    1、所需jar

    1)maven配置

    复制代码
    <dependencies>  
        <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>  
    </dependencies>  
    复制代码

    网页的话还要加入如下的maven配置:

             <dependency>
                <groupId>org.apache.logging.log4j</groupId>
                <artifactId>log4j-web</artifactId>
                <scope>runtime</scope>
            </dependency>    

    2)使用jar

    log4j-api-2.7.jar  
    log4j-core-2.7.jar 

    2、配置日志打印文件

      java项目寻找log4j2配置文件会依次读取classpath是否有下面这些文件:

    • log4j.configurationFile
    • log4j2-test.properties
    • log4j2-test.yaml 或者 log4j2-test.yml
    • log4j2-test.json 或者 log4j2-test.jsn
    • log4j2-test.xml
    • log4j2.properties
    • log4j2.json 或者 log4j2.jsn
    • log4j2.xml
    • DefaultConfiguration 

      我们在main/src/resource目录下添加log4j2.xml文件。文件内容如下:

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="WARN">
        <!-- 变量配置 -->
        <Properties>
            <Property name="log_path">${sys:catalina.home}/logs/zcrTest/</Property>
        </Properties>
     
        <!-- appender配置 -->
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" />
            </Console>
            <RollingFile name="DailyRollingFile" fileName="${log_path}/zcrTest.log"
                filePattern="${log_path}/zcrTest%d{yyyy-MM-dd}.log">
                <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" />
                <TimeBasedTriggeringPolicy  interval="1"/>
           <SizeBasedTriggeringPolicy size="10 MB" /> 
    
            </RollingFile>
        </Appenders>
        <Loggers>
         <Logger name="mylog" level="trace" additivity="false">  
           <AppenderRef ref="DailyRollingFile" />  
         </Logger>  
         <!-- 配置要使用的appender -->
       <!--
            additivity开启的话,由于这个logger也是满足root的,所以会被打印两遍。
            不过root logger 的level是error,为什么Bar 里面的trace信息也被打印两遍呢
            -->

    <Root level="info"> <AppenderRef ref="Console" /> <AppenderRef ref="DailyRollingFile"/> </Root> </Loggers> </Configuration>
    复制代码

       上面的log4j2.xml中以Configuration为根节点,有一个status属性,这个属性表示log4j2本身的日志信息打印级别。如果把status改为TRACE再执行测试代码,可以看到控制台中打印了一些log4j加载插件、组装logger等调试信息。

      日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出。对于Loggers中level的定义同样适用。

      上面配置了两种日志打印的方式,打印的等级是info。

    • Console:在命令行打印
    • RollingFile:打印到文件中

      Rolling的意思是当满足一定条件后,就重命名原日志文件用于备份,并从新生成一个新的日志文件。例如需求是每天生成一个日志文件,但是如果一天内的日志文件体积已经超过1G,就从新生成,两个条件满足一个即可。这在log4j 1.x原生功能中无法实现,在log4j2中就很简单了。

    RollingRandomAccessFile的属性:

    • fileName  指定当前日志文件的位置和文件名称
    • filePattern  指定当发生Rolling时,文件的转移和重命名规则
    • SizeBasedTriggeringPolicy  指定当文件体积大于size指定的值时,触发Rolling
    • DefaultRolloverStrategy  指定最多保存的文件个数

      TimeBasedTriggeringPolicy  这个配置需要和filePattern结合使用,注意filePattern中配置的文件重命名规则是${log_path}/zcrTest%d{yyyy-MM-dd}.log,最小的时间粒度是dd,即分钟,TimeBasedTriggeringPolicy指定的size是1,结合起来就是每一天生成一个新文件。如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每一个小时生成一个文件。

    3、调用

    复制代码
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    private static Logger logger = LogManager.getLogger(APIV1Filter.class);

    logger.info(..);
    logger.error(..)
    复制代码

    4、如果是web项目还要加入如下的配置

    复制代码
        <context-param>
            <param-name>log4jConfiguration</param-name>
            <param-value>"log4j2.xml所在目录"/log4j2.xml</param-value>
        </context-param>
    
        <listener>
            <listener-class>org.apache.logging.log4j.web.Log4jServletContextListener</listener-class>
        </listener>
    复制代码
  • 相关阅读:
    topcoder srm 445 div1
    topcoder srm 440 div1
    topcoder srm 435 div1
    topcoder srm 430 div1
    topcoder srm 400 div1
    topcoder srm 380 div1
    topcoder srm 370 div1
    topcoder srm 425 div1
    WKWebView强大的新特性
    Runtime那些事
  • 原文地址:https://www.cnblogs.com/liuyingke/p/7403524.html
Copyright © 2011-2022 走看看