Paulo, I've seen you mention a couple of times that you consider singletons dangerous. Would you care to elaborate? Is it because you're concerned that people can't write thread-safe code correctly? Or because correct thread-safe code affects concurrency? Or something else?
Thanks, Donnie > -----Original Message----- > From: Paulo Gaspar [mailto:[EMAIL PROTECTED]] > Sent: Sunday, February 03, 2002 8:19 PM > To: Jakarta Commons Developers List; [EMAIL PROTECTED] > Subject: RE: Problems with commons-logging > > > Answer inline: > > > -----Original Message----- > > From: Scott Sanders [mailto:[EMAIL PROTECTED]] > > Sent: Sunday, February 03, 2002 2:18 AM > > > > On Sat, Feb 02, 2002 at 08:33:46AM -0800, [EMAIL PROTECTED] wrote: > > > > > - security: getLogNames() and getInstance() are evil and unacceptable. > > > Both log4j and logkit have solutions that allow safe use in a > container > > > environment, i.e. support of isolation for the users of the API > > > ( one app using the package can't mess with another app's logging ). > > > I'm -1 on releasing with this whole in it. > > > > > > > I can see how getLogNames() could be considered evil, and I do > > not see what it gains us. I am +1 on remving getLogNames(). > > +1 > > > Are you saying that with getInstance(), we should remove it and > > just use newLogInstance()? I am also fine with this, albeit a +0. > > I am still not sure I understand this one. > (So, I probably don't.) > > > > > - static methods in LogSource. I suppose LogSource is a sort of > > > factory - the pattern used here is completely unnatural ( or at least > > > different from most APIs in use ). > > > > Why don't we rename LogSource to LogFactory, and change > > makeNewLogInstance() to newInstance()? +1 on this as well. > > I believe this would be consistent with things like JAXP, correct? > > +1 > > Also, as I mentioned 2 posts ago on this thread, any Singleton should > be avoided. (Some static methods might make sense but Singletons are > usually dangerous.) > > > > > - I would prefer Log to be an abstract class or even to be a > > > normal class, with the minimal logger - and have LogSource return > > > a particular impl. If static methods are used, it's cleaner to put > > > them in Log, and let the LogSource ( I would rename it LogManager ) > > > be used behind the scene. I.e. > > > Log log=Log.getLog( name ); > > > and getLog() will find a LogManager, etc. > > > > > > > I don't see the problem with having a factory take care of this, > > so I am -0. I like that Log is an interface. > > I am -1. I really like it being an interface. > > > > - It's missing a log() method that takes a level parameter. > > > Having 5 fixed levels is fine for most apps, but not > extensible enough. > > > Most loggers provide such a thing. > > BUT I do not see how to port the extensibility across APIs. For the > time being I am -1 on extensibility and +1 on having level constants. > > > I will code this up. Thanks for the comment. +1. I am assuming > > void log(int level, Object message) and the proper Throwable > > sister method?. > > Scott, I have this coded but no CPU time (mind frame) to adapt it. > Would it be ok if I send you my code and you take a look at it? > > > > > - also in the 'container use' case, given that the Logger will > > > probably be used by many components it's likely it'll end up at top > > > level loader. It would be important for different apps to use > different > > > logger adapters if they want to - the current solution allow only > > > one. > > > > > > > Why would this end up in the top level loader? I do not > > understand this. Could you explain more please? > > > > > - Given that it is a facade, it would need some way to pass at least > > > config info to the underlying logger ( at least setProperty like ). > > > Some logger may not need any, but if they do it'll require using > > > internal APIs. > > > > > > > I am -1 on walking the config line. No config. None. This API > > intends to mask all of this and allow a component to just log. > > The container using the component will be required to configure > > logging. We are not trying to replace LogKit/Log4J, we are only > > trying to replace System.out.println(), IMHO. Besides, that is > > orhtogonal IMHO, and if logging does this, it can do this in a > > later release, on a separate interface. > > I +1 on config, although on a separate/separable package. Again, > take a look on my previous post on this thread for details (not > my last one but the previous). > > > > > - I don't like the idea of constructors with a param. All other APIs > > > use a no-param constructor. You can easily call a setter if > you need to. > > > > Fine. Done. +1 > > > > > - pluggable mechanism for finding the impl. Right now everything is > > > hardcoded. Reading a properties from CLASSPATH or a similar mechanism > > > is needed. ( jaxp style preferable - i.e. java services manifest ) > > > > > > > It IS pluggable. Just set the org.apache.commons.logging.log > > property with your Log impl. Could you code up the jar services > > manifest code to augment this? Thanks. > > I also rumble about this one on that previous post a mentioned above. > > > > - Separation of interface and impl - the 2 classes that 'matter' > > > are Log and LogSource, everything else should be in a > different package. > > > It'll get messy long term, and it's harder to read. > > > > -0. I don't really see the need to break this up. I agree that > > only 2 classes really 'matter', but I do not see that as a reason > > to move them. If someone else wants to, I wont stop them. Are > > you suggesting something like an o.a.c.l.impl package? > > +1 > > I would call it o.a.c.l.wrappers since other implementation bits > might be added (like that o.a.c.l.config I am defending). > > > > > - I would prefer for the base impl to be JDK1.1 compatible. There is > > > no valid reason to exclude JDK1.1 usage - Hashtable can be used > > > without any problem, there is nothing performance critical here. > > > > Consider this done. > > +1 > > > > - makeNewLogInstance comment and impl are completely of sync. > > > > I will look into this. > > > > > - no support for i18n-style messages. Probably not a big deal > > > for the first release, but it would be nice to think about it ( I know > > > log4j can do that, I assume other as well ). > > > > > > > -0. I personally have no intention of supporting this. I think > > that commons-logging is just a simple conduit to a logging > > implementation, i18n is the concern of both sides, but not the > > middle. If we keep the Object as the log parameter, I don't see > > how we are 'missing out'. > > -1 > > The official (SUN) i18n APIs are insufficient for many apps and > that is why alternative i18n APIs are popping up like mushrooms > all around Jakarta. It would not be nice to favor any of them. > > IMO, a i18n logger could be the subject of another component (or > several - one per i18n API) based on this one. > > I also mentioned this one on my previous post. > > I have an AbstractLoggable class that supports i18n but I will > NOT contribute it to this package. > > ... > > > Have fun, > Paulo Gaspar > > http://www.krankikom.de > http://www.ruhronline.de > > > > -- > To unsubscribe, e-mail: > <mailto:[EMAIL PROTECTED]> > For additional commands, e-mail: > <mailto:[EMAIL PROTECTED]> > > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>