> From: Mauro Talevi [mailto:[EMAIL PROTECTED]]
> 
> Berin,
> 
> Berin Loritsch wrote:
> 
> >The framework part, weighing in at a mere 80k uncompressed isn't
> >very heavy.  In fact it is fairly minimalistic.
> >
> >I agree with the problem of *perception*
> >
> you would also need excalibur-logger to get the logger repository 
> functionality via the LoggerManager.
> actually, what are the reasons to keep framework.logger and 
> excalibur.logger separate (at least the LoggerManager
> and the its implementations)?
> Could they be united in Avalon5?

You dont necessarily need that part.  It was created primarily
to make configuring LogKit easier.  ECM, Fortress, and (I believe)
Phoenix use Excalibur Logging--but Merlin does not.  It isn't
necessary, but it is useful.


> >>>Keep in mind that COP (i.e. Avalon environment) has a different
> >>>set of constraints than traditional OOP.  Basically, COP forces
> >>>you to operate within a certain subset of OOP which simplifies
> >>>a number of design decisions you have to make.  It also lends
> >>>the benefit of VLC (Very Low Coupling) between implementations
> >>>of components.
> >
> >In a future version of Avalon, it is something to look at.
> >The risks of a rogue component successfully cracking a container's
> >security through logging is minimal.
> >
> what if a static access method was added to LoggerManager 
> implementations to get a singleton instance?

I really don't like that notion at all.  Not all containers
in a heirarchy of containers should share the same LoggerManager.
I have found that the Singleton pattern is *far* too overused,
and when it is used inappropriately it causes more problems than
solutions.

> Say, if one wanted to use Log4J via the Avalon Logger framework - 
> without any autodiscovery - would would simply write
> import org.apache.avalon.framework.logger.Logger;
> import org.apache.avalon.excalibur.logger.Log4JLoggerManager;
> public class MyClass {
> 
>     private static Logger logger = 
> Log4JLoggerManager.getInstance().getDefaultLogger();
> 
> }

If you wanted your component to get a logger, all you have to
do is implement the LogEnabled interface.  It's not hard at all.

You are also defeating the logger neutral stance that components
MUST have.  You can develop a component with a container using
the Log4JLoggerManager, but you cannot guarantee that it will never
be run on a container using the LogKitLoggerManager.

Singletons only serve to cause problems in this manner--a component
must be logging kit neutral because the container controls which
logging toolkit is used and which isn't.

> Effectively, that would allow OOP-style development with Avalon and 
> "prepare the ground" for COP if and when they decided to?
> One might introduce some mechanism to disable the singleton 
> access when 
> the component was deployed in  a container.

It's really more work than its worth.  With proper IoC, you can
get the same effect as COP, while still using OOP.  You can't
do it in a way that won't cause issues with the software later.

It is very difficult to get poorly written OOP to become a decoupled
component.


> BTW, I've noticed that the framework.logger.Log4JLogger still 
> used log4j 
> 1.1.x.
> Since 1.2.x has deprecated Category and Priority and these 
> are going to 
> disappear in the next few months
> I've updated the Log4JLogger to use the non deprecated 
> classes/methods.

Yes, we really need to do that.

> Being a wrapper class it should have any effect elsewhere nor 
> should it 
> matter for backward compatibility.  
> Also I've noticed that other parts of Avalon (eg. Excalibur) 
> use log4j 
> 1.2 so it would better to be consistency.
> A patch is attached.  And lib has to updated accordingly to use any 
> log4j-1.2.x.jar


Thanks.

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to