Log4j2自动清理历史日志

作者: 雁宇 | 来源:发表于2017-07-22 11:39 被阅读7470次

    说明

    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前的日志。

    相关文章

      网友评论

        本文标题:Log4j2自动清理历史日志

        本文链接:https://www.haomeiwen.com/subject/lyfukxtx.html