You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by "Rathert Jonas (Platinion)" <Ra...@platinion.de> on 2002/12/18 13:44:29 UTC
Problem understanding commons-logging default factory
Hi there,
I just started using log4j and commons-logging (I use
commons-logging-1.0.2 and log4j-1.2.7) and am now stuck
with a small problem (well, it's not really a serious problem,
but I'm curious...).
I have a commons-logging.properties file which is found at startup
of my program (this was validated by specifiying a different
LogFactory to use JLEA [http://www.jlea.de/] - which works).
Now, from what I understand, if I do not specify any particular
LogFactory in that file, commons-logging will choose
org.apache.commons.logging.impl.LogFactoryImpl
as the default factory. If I include the log4j JAR files in
my project (and configure log4j the right way), log4j is used
and works perfectly.
But then I started playing around with the
org.apache.commons.logging.Log
property. The documentation of the default factory says:
"When a new Log instance must be created, the default LogFactory
implementation uses the following discovery process is used:
* Look for a system property named
org.apache.commons.logging.Log [...]
* Look for a configuration attribute of this factory named
org.apache.commons.logging.Log.
* If the Log4J logging system is available in the application
class path, use the corresponding wrapper class
(Log4JCategoryLog).
[...]"
Following this, I tried to override the use of log4j by putting
the following line into my commons-logging.properties-file:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog
No I would expect the log output to disappear (as NoOpLog just throws
away everything). But this only happens, if I remove the log4j jar from
my project - otherwise, still log4j is used (and the Log-property above
seems to be ignored).
Even if I define this as a system-property in my java call:
java -Dorg.apache.commons.logging.Log=\
org.apache.commons.logging.impl.NoOpLog ...
the behaviour is as described above: Still,log4j is used.
Is this the expected behavior (if log4j is available, always use it in
favor of all "SimpleLog" or "NoOpLog" implementations - so the docs are
wrong here!), or did I read the wrong part of the docs? Or did I do
any other mistake?
(Actually, I'll never use SimpleLog or NoOpLog, so it's more a
academical kind of question, but as I said: I'm just curious. :-)
Thanks in advance
Jonas
--
Jonas Rathert | IT Architect
PLATINION GmbH
A Company of the Boston Consulting Group
Im Mediapark 5, 50670 Cologne/Germany
Tel. +49 221. 58 95 83 04, Mobile +49 160. 532 13 04
Fax +49 221. 589 20 51
mailto:rathert.jonas@platinion.de
http://www.platinion.de/