Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to overwrite log file name in specified in log4j2.xml with new one?

I created separate simple log class: log.java) e.g.,

import org.apache.log4j.LogManager;
public class Logs {
   private static final org.apache.log4j.Logger logger= LogManager.getLogger(Logs.class);
   public static org.apache.log4j.Logger Log() {
       return logger;
   }
}

and using following log4j2.xml file

<Configuration status="INFO">
    <Properties>
        <Property name="log-path">logs</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
        <File name="MyFile" fileName="${log-path}/Log${date:yyyy-MM-dd-HH-mm-ss}.log" immediateFlush="false" append="false">
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console" />
            <AppenderRef ref="MyFile" />
        </Root>
    </Loggers>
</Configuration>

Question: I want to pass log file name say testbest.log to my log class so that when log is created the log file name would be testbest.log instead of Log${date:yyyy-MM-dd-HH-mm-ss}.log

How can I achieve this?

like image 334
nepsks Avatar asked Nov 16 '25 19:11

nepsks


1 Answers

log4j.xml

<Configuration status="INFO">
    <Properties>
        <Property name="log-path">logs</Property>
    </Properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </Console>
        <File name="MyFile" fileName="${log-path}/${sys:log-file-name}" immediateFlush="false" append="false">
            <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="Console" />
            <AppenderRef ref="MyFile" />
        </Root>
    </Loggers>
</Configuration>

You can specify file name as VM argument when starting

java -Dlog-file-name="testbest.log"

Or you can define it programmatically as system property

System.setProperty("log-file-name", "testbest.log");
like image 159
Mihail Avatar answered Nov 18 '25 10:11

Mihail