[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [xmlblaster] Logging (Factory)



Peter Antman wrote:

Hi,
I have been taking a quick look at the logging, since I think it would
be nice to be able to hook in another logging system. The problem is,
that since the logging is tied to Global and to me the singleton global
is not something you want to use i an embedded envrionment, you will
have to have manuall access to the Glob for the component yoy would want
to hook antoher logger to.

What do you say about the following solution:

1. Define a LogDeviceFactory
public interface {
	LoggableDevive getLoggableDebice(LogChannel channel, Global glob);
}

2. Make is possible to define a LogDeviceFactory in properties, either
  one or many or even your [...] style, ie:

logDeviceFactory=my.pack.Log4jDeviceFactory
or
logDeviceFactory=my.pack.Log4jLogDeviceFactory,org.xmlBlaster.util.ConsoleLogDeviceFactory
or even
logDeviceFactory[cb]=org.xmlBlaster.util.ConsoleLogDeviceFactory


3. And in initLog in Global set up the LogDevice factory structure and
use that if its available.


In
  xmlBlaster/src/java/org/xmlBlaster/MainGUI.java

there is an example how to redirect the logging to

  public void log(int level, String source, String str)

The redirect is added by

  log.addLogDevice(this);

where 'this' implements LogableDevice
This is only for one LogChannel.

You could intercept in util.Global in

  public LogChannel getLog(String key)

and if a new LogChannel is created do a

  logChannel.removeAllDevices()

redirect this to your plugin as well.

We would prefer if you use our

  xmlBlaster/src/java/org/xmlBlaster/util/plugin/PluginManagerBase.java

framework to load plugins so that we have a common plugin loading mechanism
which looks the same for configuration
and if we change it in future all plugins
benefit from this change.
(The plugin framework changed a bit on our dev branch
but we will merge it when the time comes).


thanks,

Marcel


That way the real implementation of the logging output would be detached from the setup.

I could do the first simple implementation if you think this is ok.

(By the way, it seems to me as the logging is actually set up twice:

first in initLog and then when initLog calls       log.initialize(this);

Is this because there are old components that does not yet log through
Global?

There shouldn't be any old loggings left in the code, just ignore it.

)

//Peter