Steve Loughran wrote: > so its pretty easy to do an implementation of the commons log that sends > the messages to ant at the appropriate level, but I am stuck at the > factory > > I need the current project (and preferably task) to set up the logger. I > suppose for custom tasks (like the Axis ones) we just choose and set up > the factory. But I know that the Axis code just calls LogFactory.getLog() > , which retrieves a factory created by the standard commons algorithm, or > that set by the system properties (and hence created with an empty > constructor). And although the library caches the factory on a classloader > by classloader basis, there is no way to put a manually created factory > into the cache. > > The only way I can see that works is > > (a) set some static prop in our logfactory impl to point to the current > project, maybe task > (b) set the system property org.apache.commons.logging.Log to our class > (c) have the log factory get its data from the statics > (d) write something to hide (a) and (b) from the general public out of > embarassment. > > Any other better solution out there?
Not sure what you need - we can save the LogFactory in an ant reference, if you want all tasks to use the same factory. Or we can add a set method to c-l that sets the LogFactory for the current context. ( I don't think it should be the Thread, but the Thread.contextClassLoader() - so you can set it per webapp ). Something like static LogFactory.setLogFactory( ClassLoader thCL, LogFactory f); Send a patch to commons, it seems a reasonable use case. Costin -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>