Being able to call Category.getInstance("name", aFactory) is really nice, 
I can subclass the Category class and add more log-like methods (and 
putting them all in one convenient object, tied to a namespace is very 
nice). For example, I can add a statistics counting method, such as 
"count(int i) to the subclass and use a single object for logging and 
statistics counting.

There is an inherit problem in this design...consider:

I configure log4j using a properties file and reference something like 
the following (I can turn this on or off):

log4j.category.com.abc.xyz=debug, stdout

Before any of my code is called the log4j mechanism will have created an 
entry named "com.abc.xyz" in its hashtable and created an object (which 
WILL be a Category object) for this object. Subsequent access to the 
object with name "com.abc.xyz" will return this instance (that was put 
into the hashtable).

Somewhere in my constructor for this object I do:

SubclassOfCategory cat = (SubclassOf)Category.getInstance(classname, 
myFactory);

where myFactory has a "makeNewCategoryInstance" method that returns a 
subclass of Category (specifically, SubclassOfCategory).

The problem is that if I dont setup the statement in the log4j properties 
file (or the watchlog property file) then this code works fine – the 
first time the object named "com.abc.xyz" is referenced by category is 
using MY category factory – and so my version of the object is put into 
the hashtable.

But if I "turn on" the entry in the properties file, log4j gets "in 
there" first and screws it up so that the getInstance method return a 
Category object instead of the subclass SubclassOfCategory object and I 
get a class cast exception.

So, can you tell me how to tell log4j to use a given factory as the 
default. There must be a way...possibly a static method in 
org.log4j.Hierarchy that allows me to set its default factory.

Any ideas? If so could you email me as well on [EMAIL PROTECTED] as I'm not 
quite on the list yet.

Mike Papper

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

Reply via email to