Question

I have the following log4j2.xml file:

<?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. How can I limit the number of partial log files created in 1.? What I want to achieve is a scheme like the following:

    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.

Was it helpful?

Solution

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

Interesting for you seams to be something like this (using 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>
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top