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?
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");
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With