I am using the Routing Appender in Log4J2 to route to different log files.
The path is determined by a custom LookUp. The configuration and the lookup
are as follows.
*Log4j2.xml Routing appender*
<Routing name="Routing">
<Routes pattern="$${path:key2}">
<Route>
<RollingFile name="ABC_LOGFILE"
fileName="${sys:abc.home}/${path:key2}.log"
filePattern="${sys:abc.home}/${path:key2}-%d{MM-dd-yyyy}-%i.log">
<PatternLayout pattern="[%d] %5p {%c} - %m%ex%n" />
<Policies>
<SizeBasedTriggeringPolicy size="50 MB" />
</Policies>
<DefaultRolloverStrategy max="100" />
</RollingFile>
</Route>
</Routes>
</Routing>
*Custom Lookup*
@Plugin(name = "path", category = StrLookup.CATEGORY)
public class LogFilePathLookup implements StrLookup {
private static String logFilePath = "abc";
@Override
public String lookup(String key) {
return null;
}
@Override
public String lookup(LogEvent logEvent, String key) {
return logFilePath;
}
/**
* Sets the log file path.
*
* @param logFilePath log file path
*/
public static void setLogFilePath(String logFilePath) {
LogFilePathLookup.logFilePath = logFilePath;
}
}
This works perfectly when I run on the IDE (Intellij IDEA) with the VM
options set as
-Dlog4j.configurationFile=/path/to/log4j2.xml
-Dabc.home=/home/asma/abchome
and some program arguments. But when the same is run in the terminal as
java -Dlog4j.configurationFile=/path/to/log4j2.xml
-Dabc.home=/home/asma/abchome -jar *<program_arguments>*
the name of the log file getting created is ${path:key2}.log, meaning it is
not replaced by the lookup String value. What could be the reason for this?
Regards,
Asma