I have a question on the best way to handle configuring log4j when multiple 
sub-systems/components each are using log4j. For example, if you use Struts 
and Cactus in addition to your own code then there are 3 different users of 
log4j that may require specific things to be setup at configuration time, 
for example custom categories/category factories.

My thinking is that in each sub-system configuration, you only address 
things that are specific to that particular sub-system,. That is, you 
follow a naming convention to minimize name clashes, such as 
SubSystem1_ConsoleAppender. You only set priorities and appenders for the 
specific sub-system categories, e.g. 
log4j.category.org.subsystem1=DEBUG,SubSystem1_ConsoleAppender and never 
set global things like rootCategory, ending up with a structure along the 
following lines :

SubSystem1
        SubSystem1_Log4jConfig.xml (if custom categories are used) OR
        SubSystem1_Log4jConfig.properties

SubSystem2
        SubSystem2_Log4jConfig.properties

... etc

However, if you only address things that are specific to a particular 
sub-system in the configuration file for that sub-system (which is probably 
a good thing), how do you handle the case where the sub-system is used in 
isolation and you want to setup some global defaults, such as rootCategory 
logging ? One possible solution would be to use the command line 
-Dlog4j.configuration= method or you can initialize these global things 
from your own code directly or via a configuration file loaded by your own 
code or even better would be letting the default log4j initialization take 
care of that issue.

One problem with this approach that springs to mind is those people that 
want all the log4j configuration in one place and not spread over multiple 
files. How would you tell the sub-system not to do it's initialization? If 
the sub-system used custom categories would a reasonable approach be to 
check to see if one of those categories was already defined in the list 
returned by Category.getCurrentCategories() and then only initialize if it 
wasn't yet defined?

On another tack, it appears the only way to handle custom categories in a 
safe, extensible manner is to use the DOMConfigurator, is that correct ?

TIA

Robert


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to