Log4J2 Lookup working when run on IDE but not when run in the command line

classic Classic list List threaded Threaded
5 messages Options
Reply | Threaded
Open this post in threaded view
|

Log4J2 Lookup working when run on IDE but not when run in the command line

Asma Zinneera Jabir
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
Reply | Threaded
Open this post in threaded view
|

Re: Log4J2 Lookup working when run on IDE but not when run in the command line

Matt Sicker
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 <[hidden email]> 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 <[hidden email]>
Reply | Threaded
Open this post in threaded view
|

Re: Log4J2 Lookup working when run on IDE but not when run in the command line

Ralph Goers
Maybe, but the point is that the batch is managed by the appender, so there is no need for a new method in the Appender interface.

Ralph

> On Jan 9, 2018, at 2:20 PM, Matt Sicker <[hidden email]> wrote:
>
> 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 <[hidden email]> 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 <[hidden email]>



---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Log4J2 Lookup working when run on IDE but not when run in the command line

Ralph Goers
Shoot. Replied to the wrong email.

Sent from my iPhone

> On Jan 9, 2018, at 3:00 PM, Ralph Goers <[hidden email]> wrote:
>
> Maybe, but the point is that the batch is managed by the appender, so there is no need for a new method in the Appender interface.
>
> Ralph
>
>> On Jan 9, 2018, at 2:20 PM, Matt Sicker <[hidden email]> wrote:
>>
>> 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 <[hidden email]> 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 <[hidden email]>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>



---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|

Re: Log4J2 Lookup working when run on IDE but not when run in the command line

Asma Zinneera Jabir
 Hi Matt,

Thank you for your response. I figured out the issue. Had to add the
"packages" attribute in the <Configuration> element which I had not added
before.



On Wed, Jan 10, 2018 at 3:37 AM, Ralph Goers <[hidden email]>
wrote:

> Shoot. Replied to the wrong email.
>
> Sent from my iPhone
>
> > On Jan 9, 2018, at 3:00 PM, Ralph Goers <[hidden email]>
> wrote:
> >
> > Maybe, but the point is that the batch is managed by the appender, so
> there is no need for a new method in the Appender interface.
> >
> > Ralph
> >
> >> On Jan 9, 2018, at 2:20 PM, Matt Sicker <[hidden email]> wrote:
> >>
> >> 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 <[hidden email]>
> 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 <[hidden email]>
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [hidden email]
> > For additional commands, e-mail: [hidden email]
> >
> >
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>