Alexei
Alexei

Reputation: 15646

Log4j2.xml - RollingFile incorrecting work

Java 1.8

log4j-slf4j-impl

Maven 3.5

I want to generate every day new log file.

So I use RollingFile

Here my log4j2.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration package="log4j.test" status="WARN">
    <Properties>
        <Property name="baseDir">logs</Property>
        <Property name="patterLayout">%d{[dd.MM.yyyy HH:mm:ss.SSS]} %l %p:%n %m%n</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="${patterLayout}"/>
        </Console>

       
        <RollingFile name="RollingFile" fileName="${baseDir}/trace.log"
                     filePattern="${baseDir}/$${date:yyyy-MM}/trace-%d{yyyy-MM-dd}.log.gz">
            <PatternLayout pattern="${patterLayout}"/>
            <CronTriggeringPolicy schedule="0 0 0 * * ?"/>
            <DefaultRolloverStrategy>
                <Delete basePath="${baseDir}" maxDepth="2">
                    <IfFileName glob="*/trace-*.log.gz"/>
                    <IfLastModified age="60d"/>
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
    </Appenders>

    <Loggers>
      
        <Root level="trace">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Root>
        <Logger name="org.apache.poi" level="error">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Logger>
        <Logger name="org.apache.xmlbeans" level="error">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Logger>
    </Loggers>
</Configuration>

I use RollingFile from official doc:

Doc

pom.xml

<dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
        </dependency>

Here java code:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class App {
    private static final Logger logger = LoggerFactory.getLogger(App.class);
   

    public static void main(String[] args) {
        logger.trace("JDK: {}, project dir {} ", System.getProperty("java.version"), System.getProperty("user.dir"));
        
    }
}

Here trace.log result:

[28.11.2021 17:28:33.972] com.myproject.xls2metro2.util.XlsxUtil.xlsx2metro2(XlsxUtil.java:17) DEBUG:
 Converting /xls2metro2/link/abs/import/test.txt to METRO2 file...
[28.11.2021 17:28:34.063] com.myproject.xls2metro2.util.XlsxUtil.xlsx2metro2(XlsxUtil.java:17) DEBUG:
 Converting /xls2metro2/link/abs/import/not_exist_file.txt to METRO2 file...



[30.11.2021 19:09:25.560] com.myproject.xls2metro2.util.XlsxUtil.xlsx2metro2(XlsxUtil.java:17) DEBUG:
 Converting /xls2metro2/link/abs/import/test.txt to METRO2 file...
[30.11.2021 19:09:25.626] com.myproject.xls2metro2.util.XlsxUtil.xlsx2metro2(XlsxUtil.java:17) DEBUG:
 Converting /xls2metro2/link/abs/import/not_exist_file.txt to METRO2 file...

As you can see logs for differents day generate in ONE log file.

But I need new log for every day.

Upvotes: 0

Views: 609

Answers (1)

Alexei
Alexei

Reputation: 15646

This work correct. Use another RollingFile:

 <?xml version="1.0" encoding="UTF-8"?>
<Configuration package="log4j.test" status="WARN">
    <Properties>
        <Property name="baseDir">logs</Property>
        <Property name="patterLayout">%d{[dd.MM.yyyy HH:mm:ss.SSS]} [%t] %l %p:%n %m%n</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="${patterLayout}"/>
        </Console>
        <RollingFile
                name="RollingFile"
                fileName="${baseDir}/trace.log"
                filePattern="${baseDir}/trace.%d{dd-MMM}.log.gz"
                ignoreExceptions="false">
            <PatternLayout>
                <Pattern>${patterLayout}</Pattern>
            </PatternLayout>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1"/>
            </Policies>
            <DefaultRolloverStrategy max="5"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        
        <Root level="trace">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Root>
        <Logger name="org.apache.poi" level="error">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Logger>
        <Logger name="org.apache.xmlbeans" level="error">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="RollingFile"/>
        </Logger>
    </Loggers>
</Configuration>

And now every day generate new log.

trace.02-Dec.log.gz
trace.03-Dec.log.gz
trace.log

Nice.

So the question is:

Why example from official documentation is not work? Example from official documentation

Upvotes: 1

Related Questions