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