Log4j2自动清理历史日志

96
雁宇
0.1 2017.07.22 11:39* 字数 555

说明

log4j2中,可以通过配置RollingFileAppender的清理策略来实现自动清理日志,具体可以参照官网中对RollingFileAppender配置文件的介绍:https://logging.apache.org/log4j/2.x/manual/appenders.html#FileAppender

另外,log4j1中的RollingFileAppender虽然无法实现自动清理日志的功能,但可以通过自己定义Appender来实现,可参照:log4j自动日志删除(转)

样例

可以通过一个简单的样例来查看log4j2的自动清理日志功能,操作步骤如下:

  1. 使用Maven新建项目,可以命名为log4j2_demo

  2. 完善pom.xml,加入对log4j2的依赖及编译器插件。(注:log4j2在2.3及以前版本支持JDK1.6,2.3之后的版本需要JDK1.7)

    <properties>
        <log4j2.version>2.7</log4j2.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j2.version}</version>
        </dependency>
    </dependencies>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    
  3. 在src/main/java目录下新建类Demo,用于不断产生日志,Demo.java内容如下:

    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    public class Demo {
        private static final Logger logger = LogManager.getLogger();
    
        public static void main(String[] args) {
            while (true) {
                logger.trace("trace level");
                logger.debug("debug level");
                logger.info("info level");
                logger.warn("warn level");
                logger.error("error level");
                logger.fatal("fatal level");
            }
        }
    }
    
  4. 在src/main/resource下创建log4j2的配置文件log4j2.xml,写入配置,内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="warn">
        <Properties>
            <Property name="baseDir">logs</Property>
        </Properties>
    
        <Appenders>
            <RollingFile name="RollingFile" fileName="${baseDir}/app.log" filePattern="${baseDir}/$${date:dd日hh时}/app-%d{mm分ss秒}.log.gz">
                <PatternLayout pattern="%d %p %c{1.} [%t] %m%n" />
                <CronTriggeringPolicy schedule="* * * * * ?"/>
                <DefaultRolloverStrategy>
                    <Delete basePath="${baseDir}" maxDepth="2">
                        <IfFileName glob="*/app-*.log.gz" />
                        <IfLastModified age="5s" />
                    </Delete>
                </DefaultRolloverStrategy>
            </RollingFile>
        </Appenders>
      
        <Loggers>
            <Root level="all">
                <AppenderRef ref="RollingFile"/>
            </Root>
        </Loggers>
    </Configuration>
    
  5. 运行Demo类,可以看到在项目路径下的logs文件夹中,每秒都会产生一个日志文件,并且每隔秒都会自动删除上一次修改在5s前的日志。

Java
Web note ad 2