log4j配置 自动删除日志文件

 

1. 需要使用的两个包

log4j-core-xx.jar     log4j-api-xx.jar

 

2. classpath为scr文件夹下

必须注意.xml 文件的文件名为log4j2

 

<?xml version="1.0" encoding="UTF-8"?>  
<!-- status=debug 可以查看log4j的装配过程 -->  
<Configuration status="off" monitorInterval="1800">  
  
    <properties>  
        <property name="LOG_HOME">logs/sample</property>  
        <property name="FILE_NAME">mylog</property>  
    </properties>  
  
    <Appenders>  
        <!-- 定义控制台输出 -->  
        <Console name="Console" target="SYSTEM_OUT">  
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />  
        </Console>  
  
        <RollingRandomAccessFile name="running-log"  
            fileName="${LOG_HOME}/${FILE_NAME}.log" filePattern="${LOG_HOME}/  
                           $${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log.gz">  
            <PatternLayout  
                pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] -   
                           %msg%n" />  
            <Policies>  
                <!-- 每天生成一个日志文件 -->  
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>  
                <!-- 每到10M生成一个日志文件 -->  
                <SizeBasedTriggeringPolicy size="10 MB" />  
            </Policies>  
            <!-- 最大保存文件数 -->  
            <DefaultRolloverStrategy max="20" />  
        </RollingRandomAccessFile>  
  
        <!-- 文件会打印出所有信息,这个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>  
  
        <!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入 -->  
        <!-- 按年份-月份建立的文件夹下面并进行压缩,作为存档 -->  
        <RollingFile name="RollingFile" fileName="logs/app.log"  
                     filePattern="log/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">  
            <PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36}   
                     %L %M - %msg%xEx%n"/>  
            <SizeBasedTriggeringPolicy size="50MB"/>  
        </RollingFile>  
  
    </Appenders>  
      
    <Loggers>  
        <Logger name="com.cnblogs.yjmyzz.App2" level="trace"  
            additivity="true">  
            <AppenderRef ref="running-log" />  
        </Logger>  
        <Root level="error">  
            <AppenderRef ref="Console" />  
        </Root>  
    </Loggers>  
</Configuration>  

 

3. 参数说明

第3行 

      中的 monitorInterval=”1800″指log4j2每隔1800秒(半小时),自动监控该配置文件是否有变化,如果变化,则自动根据文件内容重新配置。

5-8行 

      定义了一些属性(可以根据需要自己随便添加),主要是为了后面引用起来方便。

16行 

     RollingRandomAccessFile 即表示以文件方式记录,注意一下filePattern的设置,它与24行的SizeBasedTriggeringPolicy(表示单个文件最大多少容量)结合在一起,非常有用,以这段配置为例,当单个文件达到10M后,会自动将以前的内容,先创建类似 2014-09(年-月)的目录,然后按 “xxx-年-月-日-序号”命名,打成压缩包。

27行 

      DefaultRolloverStrategy max=”20″表示压缩包,最多保留20个。

45-48行

      定义了一个新logger,它的级别是trace,使用文件方式来记录日志,additivity=”true”这里注意一下,因为下面还有一个root logger,任何其它的logger最终都相当于继承自root logger,所以“com.cnblogs.yjmyzz.App2”这个logger中,如果记录了error及以上级别的日志,除了文件里会记录外,root logger也会生效,即:控制台也会输出一次。如果把additivity=”true” 中的true,改成false,root logger就不会再起作用,即只会记录在文件里,控制台无输出。

TimeBasedTriggeringPolicy 基于时间的触发策略。该策略主要是完成周期性的log文件封存工作。有两个参数:

interval,integer型,指定两次封存动作之间的时间间隔。单位:以日志的命名精度来确定单位,比如yyyy-MM-dd-HH 单位为小时,yyyy-MM-dd-HH-mm 单位为分钟

modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,则封存时间将以0点为边界进行偏移计算。比如,modulate=true,interval=4hours,那么假设上次封存日志的时间为03:00,则下次封存日志的时间为04:00,之后的封存时间依次为08:00,12:00,16:00,。。。

    原文作者:CaptainDing
    原文地址: https://blog.csdn.net/u012061196/article/details/106105671
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞