A common source of problems with custom plugins is related to the
Log4j2Plugins.dat file not being generated or being included on the
classpath. If you shade everything into a single jar, for example, you need
to use a custom shade rule to merge the plugin dat files (I've seen some
shade plugins include this feature natively for log4j2 specifically).

If you could share more info about how you build your application, that
would be super helpful!

On 9 January 2018 at 12:28, Asma Zinneera Jabir <azinne...@gmail.com> wrote:

> 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
>



-- 
Matt Sicker <boa...@gmail.com>

Reply via email to