log4j2 - 限制日志文件的数量

时间:2021-01-19 21:53:55

I have the following log4j2.xml file:

我有以下log4j2.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
  <appenders>
    <RollingFile name="testLog" fileName="test.log" filePattern="" append="false">
      <PatternLayout pattern="[%t] %-5level - %msg%n%n"/>
    <SizeBasedTriggeringPolicy size="5mb" />
    </RollingFile>
  </appenders>
  <loggers>
    <logger name="TestsLogger" level="trace" additivity="false">
      <appender-ref ref="testLog"/>
    </logger>
    <root level="debug">
      <appender-ref ref="testLog"/>
    </root>
  </loggers>
</configuration>

How can I modify this configuration such that

如何修改此配置

  1. Instead of overwriting the same logfile over and over again a new file is created after the 5mb limit has been reached. It would be nice to have something like test1.log, test2.log and so on.
  2. 在达到5mb限制后,不会一遍又一遍地覆盖相同的日志文件,而是创建一个新文件。有一些像test1.log,test2.log等的东西会很好。
  3. How can I limit the number of partial log files created in 1.? What I want to achieve is a scheme like the following:

    如何限制在1中创建的部分日志文件的数量?我想要实现的是如下方案:

    creating test1.log [present log files: test1.log]
    test1.log - 5mb limit reached
    creating test2.log [present log files: test1.log, test2.log]
    test2.log - 5mb limit reached
    creating test3.log [present log files: test2.log, test3.log]
    test3.log - 5mb limit reached
    creating test4.log [present log files: test3.log, test4.log]
    and so on
    

Does anyone know, how to achieve something like that? Of course it would be nice, if something like that was possible with log4j2 alone. But maybe there is a way to combine log4j2 with some kind of external program that would run alongside the main Java application and delete superfluous log files, while keeping the two last log files intact. So if anyone has at least a suggestion for 1., it may be already, what I'm looking for. Because I may be able to write a program for the 2nd part. Of course it would be awesome, if the 2nd part could be done with log4j2 as well.

有谁知道,如何实现这样的目标?当然,如果仅使用log4j2就可以实现这样的功能,那将会很棒。但也许有一种方法可以将log4j2与某些外部程序结合起来,这些外部程序将与主Java应用程序一起运行并删除多余的日志文件,同时保持最后两个日志文件的完整性。因此,如果任何人至少有一个1.的建议,它可能已经,我正在寻找。因为我可以为第二部分编写程序。当然,如果第二部分也可以用log4j2完成,那将是非常棒的。

1 个解决方案

#1


22  

I never used log4j2 so far but the documentation of the RollingFileAppender gives you a lot of configuration examples.

到目前为止我从未使用过log4j2,但RollingFileAppender的文档为您提供了许多配置示例。

Interesting for you seams to be something like this (using DefaultRolloverStrategy):

有趣的是你的接缝是这样的(使用DefaultRolloverStrategy):

<RollingFile name="RollingFile" fileName="logs/app.log"
             filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
  <PatternLayout>
    <pattern>%d %p %C{1.} [%t] %m%n</pattern>
  </PatternLayout>
  <Policies>
    <SizeBasedTriggeringPolicy size="5 MB"/>
  </Policies>
  <DefaultRolloverStrategy max="20"/>
</RollingFile>

#1


22  

I never used log4j2 so far but the documentation of the RollingFileAppender gives you a lot of configuration examples.

到目前为止我从未使用过log4j2,但RollingFileAppender的文档为您提供了许多配置示例。

Interesting for you seams to be something like this (using DefaultRolloverStrategy):

有趣的是你的接缝是这样的(使用DefaultRolloverStrategy):

<RollingFile name="RollingFile" fileName="logs/app.log"
             filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
  <PatternLayout>
    <pattern>%d %p %C{1.} [%t] %m%n</pattern>
  </PatternLayout>
  <Policies>
    <SizeBasedTriggeringPolicy size="5 MB"/>
  </Policies>
  <DefaultRolloverStrategy max="20"/>
</RollingFile>