1

I have simple question.

How to have log file name dynamically supplied from code?

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" name="MyApp" packages="">

<Appenders>
    <RollingFile name="RollingFile" fileName="${logfilename}.log"
                 filePattern="logs/$${date:yyyy-MM}/app-%d{yyyy-MM-dd-HH}-%i.log.gz">
        <PatternLayout>
            <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
        </PatternLayout>
        <Policies>
            <TimeBasedTriggeringPolicy interval="6" modulate="true"/>
            <SizeBasedTriggeringPolicy size="250 MB"/>
        </Policies>
    </RollingFile>
</Appenders>

<Loggers>
    <Root level="error">
        <AppenderRef ref="RollingFile"/>
    </Root>
</Loggers>

Here file name is logs/app.log.

  • How to make it dynamic with date and time appended as well in file name? Though pattern is applied but it doesn't work.
  • Here logs is the directory which log4j library automatically creates, can it be dynamic as well?

EDIT In parameter fileName I have placed ${logfilename}.log and setting system property as below:

System.setProperty("logfilename", "a_cool_logname");

Now it is creating file with name ${logfilename}.log which is definitely not required.

Thanks

Faizan Mubasher
  • 4,427
  • 11
  • 45
  • 81
  • Possible duplicate of [How to give dynamic file name in the appender in log4j.xml](https://stackoverflow.com/questions/2810926/how-to-give-dynamic-file-name-in-the-appender-in-log4j-xml) – Daria Pydorenko May 24 '18 at 09:53
  • This line `System.setProperty("logfilename", "a_cool_logname");` creates log file with name `${logfilename}.log`. Funny though :D – Faizan Mubasher May 24 '18 at 10:09
  • See the [log4j2 FAQ page](https://logging.apache.org/log4j/2.0/faq.html#separate_log_files) – D.B. May 25 '18 at 04:14

1 Answers1

0

**Property File Look like this **

    log4j.rootLogger=DEBUG, FA


#Console Appender WE WRE NOT USING IT
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%d{dd MM yy HH:mm} %-5p  %m%n


#File Appender
log4j.appender.FA=org.apache.log4j.FileAppender
log4j.appender.FA.File=${fName}
#log4j.appender.FA.MaxFileSize=5MB
#log4j.appender.FA.MaxBackupIndex=3
log4j.appender.FA.layout=org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern=%d{dd MM yy HH:mm} %8p  %10m%n 

# Set the logger level of File Appender to WARN
log4j.appender.FA.Threshold = INFO
log4j.appender.FA.Threshold = DEBUG

**And set Properties in JAVA **

System.setProperty("fName", "d:\\siemens\\" + getDateTime() + c.getSimpleName() +".log");
        PropertyConfigurator.configure("log4j.properties");

let me know if u need further query thanks