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

Re: [xmlblaster] Logging (Factory)



On  5 Nov, Marcel Ruff wrote:
> 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.

Yea I know that, but it is not at all what I want, since it requres
programatic access to global, which is not possible, if you for example
want to ad a LoggableDevice to XmlBlasterService, which is not already
part of XmlBlaster.
> 
> 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.

I think it would be better to do it in:

   private void initLog(LogChannel lc) 

since all log channel creation/inititalization seems to go through that
method, both from addLogChannel, getLog and from constructors.

> 
> 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).

Ok. I will look at it and see if I understand it, but I don't know if I
reallt view this as a plugin: its more a small variation on the code
thats already there:

Instead of

      boolean bVal = getProperty().get("logConsole", true);
      if (key != null) getProperty().get("logConsole[" + key + "]", bVal);
      if (bVal == true) {
         LogDeviceConsole ldc = new LogDeviceConsole(lc);
         lc.addLogDevice(ldc);
      }

something like this:

if (logdeviceFactory == null) {
  String fac = getProperty().get("logDeviceFactory",
  "org.jutils.log.LogDeviceConsole");
   Class clazz =
   Thread.currentThread().getContextClassLoader().loadClass(fac):
   logdeviceFactory = (LogDeviceFactory)clazz.newInstance();
   
}

LogDevice ldc = logdeviceFactory.getLogDevice(lc,getProperty());
lc.addLogDevice(ldc);

How would the Plugin stuff help here?

//Peter

> 
> 
> 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
>>  
>>

-- 
------------------------------------------------------------
Peter Antman	Chief Technology Officer, Development
Technology in Media, Box 34105 100 26 Stockholm
WWW: http://www.tim.se	WWW: http://www.backsource.org
Email: pra at tim.se	 
Phone: +46-(0)8-506 381 11 Mobile: +46-(0)704 20 58 11
------------------------------------------------------------