Search code examples
javaxmlconfigurationlog4jconfiguration-files

dynamic log file name log4j xml file config with timestamp


I have bellow xml config file with static log filename "CRM_Update_dubg_Logs.log", I want to make this name with timestamp, java log4j 2.9.1

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
    <Console name="Console" target="SYSTEM_OUT">
        <PatternLayout pattern="%d{HH:mm:ss.SSS}{GMT+3} [%t] %-5level 
%logger{36} - %msg%n" />
    </Console>
    <File name="MyFile" fileName="CRM_Update_Logs.log" immediateFlush="true" append="true">
        <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS}{GMT+3} %c{2} [%t] %-5level %logger{36} - %msg%n"/>
    </File>
    <File name="dubg_Logs" fileName="CRM_Update_dubg_Logs.log" immediateFlush="true" append="true">
        <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS}{GMT+3} %c{2} [%t] %-5level %logger{36} - %msg%n"/>
    </File>
</Appenders>
<Loggers>
    <Root level="debug">
        <AppenderRef ref="Console"/>
        <AppenderRef ref="MyFile"/>
        <AppenderRef ref="dubg_Logs"/>
    </Root>
    <Logger level="ALL" additivity="false" name="dubg">
        <AppenderRef ref="dubg_Logs"/>
    </Logger>
</Loggers>


Solution

  • Edit filename in xml

    fileName="CRM_Update_Logs.log"    
    

    to be

    fileName="${sys:logFilename}_CRM_Update_Logs.log"
    

    and add this to your java code

        Date date = new Date();      
        String LogDate= new SimpleDateFormat("yyyyMMdd").format(date);
        System.setProperty("logFilename", LogDate);