On Aug 16, 2013, at 4:55 PM, Gary Gregory <garydgreg...@gmail.com> wrote:

> On Fri, Aug 16, 2013 at 7:54 PM, Gary Gregory <garydgreg...@gmail.com>wrote:
> 
>> On Fri, Aug 16, 2013 at 6:21 PM, David Nault <david.na...@criticalpath.net
>>> wrote:
>> 
>>> Hi All,
>>> 
>>> We're using Log4j in a webapp and are looking at migrating to Log4j 2.
>>> 
>>> We'd like to continue writing our log files to a location under the
>>> webapp's context root -- that is, under the directory returned by
>>> ServletContext.getRealPath("/"). This works very well in our QA environment
>>> where multiple versions of the webapp are deployed to a single Tomcat
>>> server.
>>> 
>>> I've written a Lookup plugin that maps "${web:rootDir}" to the desired
>>> path. The problem is that the plugin is ignored when parsing the config
>>> file, specifically the "filename" attribute of a "File" appender. The
>>> BaseConfiguration object seems to be using a StrSubstitutor with a default
>>> Interpolator that only knows about the "sys" and "env" prefixes.
>>> 
>>> For what it's worth, the custom Lookup plugin works fine when used in a
>>> pattern layout string.
>>> 
>>> Any thoughts on how to get the BaseConfiguration to use a custom Lookup
>>> plugin, or alternate ways to get the log files to appear under the webapp
>>> root? System properties aren't the solution since they are shared between
>>> webapps and we'd rather not return to the bad old days of using a different
>>> property for each webapp.
>>> 
>>> Log4j 2 beta 8.
>>> 
>>> 
>> Any config item that is annotated with Log4j annotations has to be part of
>> Log4J's config dat file. I'm not not 100% sure, but I think you might have
>> to regenerate Log4J's config dat file. There might be a way to scan the CP
>> for additional code to scan...
>> 
> 
> Also: This might be a nice add-on to Log4j if you're willing to contribute
> it ;)
> 
> Gary
> 


Thanks Gary. I've filed LOG4J2-364 and contributed what I've got so far.

Regarding scanning the class path for plugins, I thought I had taken care of 
this by executing the following line in a ServletContextListener that runs 
before Log4j:

     PluginManager.addPackage(WebLookup.class.getPackage().getName());

This doesn't seem to have an effect though, since BaseConfiguration doesn't use 
the PluginManager to create it's initial list of Lookup implementations.

Thanks,
David







---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscr...@logging.apache.org
For additional commands, e-mail: log4j-user-h...@logging.apache.org

Reply via email to