Satish Moningi
Satish Moningi

Reputation: 21

log4j2 TimeBasedTriggeringPolicy not working as expected

I have configured the log4j2.xml file in such a way that application.log file will be created and it should be rollover daily.

<?xml version="1.0" encoding="UTF-8"?>
<!-- ===================================================================== -->
<!-- Log4j2 Configuration                                                  -->
<!-- ===================================================================== -->

<Configuration status= "INFO">
    <!-- Common properties used in all appenders -->
    <Properties>
        <Property name="logBaseDirectory">/apps/wsserver/8.5/bpm/logs/log4j/sbl</Property>          
        <Property name="logPattern">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5p %c{1} %X{transaction.id} %m%n</Property>
        <Property name="maxFileAge">90d</Property>
    </Properties>
    
    <!-- Define required appenders -->  
    <Appenders>
        <!-- ============================================================================================================================================ -->
        <!--                                                log4j 1.x to 2.x migratoin steps                                                              -->
        <!-- DailyRollingFileAppender rolling file appender is no longer availble in log4j2. So we need to use RollingFile with TimeBasedTriggeringPolicy --> 
        <!-- Right most value in filePattern will be considered as Interval for TimeBasedTriggeringPolicy rolling                                         -->
        <!-- Orignal log file will be application.log and archive will be application-20200917.log.zip - Auto compression of file                         -->
        <!-- Remove the all archived logs which are older than 90 days                                                                                    -->
        <!-- ============================================================================================================================================ -->
        <RollingFile name="application" fileName="${logBaseDirectory}/application.log" filePattern="${logBaseDirectory}/application-%d{yyyy-MM-dd}.log.zip">
            <PatternLayout pattern="${logPattern}"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy />
                <CronTriggeringPolicy />
            </Policies>
             <DefaultRolloverStrategy>
                <Delete basePath="${logBaseDirectory}" maxDepth="1">
                    <IfFileName glob="application-*.log.zip" />
                    <IfLastModified age="${maxFileAge}" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>
    </Appenders>
    
    <!-- Define the list of loggers required -->
    <Loggers>   
        <logger name="MediationServices" level="TRACE" additivity="false">          
            <appender-ref ref="application" />
        </logger>
        
        <root level="TRACE" additivity="false">         
            <appender-ref ref="application" />
        </root>
    </Loggers>  
</Configuration>

But in JVM, applicatoin.log file is getting rollover after 10MB and if three times it is rolled, the first file is getting overwritten. That means at any point of time i am having application.log and application-2020-10-16.log.zip.

Why log4j2 (v2.13) is rolling over the files for every 10MB even though configured as daily? Any pointers identifying issue in log4j2 configuration is much apricated.

Upvotes: 0

Views: 839

Answers (1)

Satish Moningi
Satish Moningi

Reputation: 21

Issue has been identified. AS <SizeBasedTriggeringPolicy /> is defined in configuration file, log4j2 is considering 10MB default value as file size and getting rollover. After removing this tag, issue has been resolved.

Upvotes: 1

Related Questions