forwarded at Peter's request

-------- Original Message --------
Subject: Re: Common Logging Interface
Date: Tue, 20 Nov 2001 11:38:29 -0500
From: "Richard Sitze" <[EMAIL PROTECTED]>
To: Berin Loritsch <[EMAIL PROTECTED]>
CC: [EMAIL PROTECTED]

Richard Sitze wrote:

> Sometimes I hate Lotus Notes - I really want the ">" inserted before each
> original line automatically, but Notes won't do it...
>
> My comments <ras>below</ras>


Then why use it ;P


>>to Log4J, LogKit, or any other technology. Your logging framework is a >>solid basis (if I can resolve a few issues). I grant that a logging >>framework is very simple and small, but we really don't want a nth API. >> > > > It does apply. If you want to extend the Avalon Framework with your > logging framework that adds some extra pieces, that would fine by me. > I just haven't heard any solid arguments to make me want to break backwards > compatibility or violate the design principles we so strongly adhere to. > > <ras> > One of us is missing something here :-) Seriously, it doesn't apply today: > I'm not extending Avalon Framework. I'm not using the Avalon API. I'm > trying to adopt a logging framework into a legacy server: say "IBM > WebSphere Application Server" 10 times... While I wouldn't rule out > adopting WebSphere to Avalon in the future (anything can happen), it's not > on the table now. Meanwhile, we bring OpenSource technologies (Tomcat, > AXIS, Eclipse, and other's I'm sure) in, and put them to work because it's > what our customers want. > </ras>


Here is my point. The abstract logging API is part of Avalon framework. If you include the Avalon Framework Jar into WebSphere, you don't have to suddenly migrate all at once. You can take the Logging aspect (Separation of Concerns remember?), and use only that aspect. When you want to adopt the other lifecycle aspects of Avalon Framework, then you will gradually realize the scalability of its design.

<ras>
Perhaps I'm still missing something.
I think you are saying that there is the logging framework (Java package),
AND there is the Logging aspect of the Avalon API,
AND there are other aspects of the Avalon API.
Is this correct?
</ras>


In the end, if you use the abstraction API, it does not require you to use the LogEnabled interface to obtain the Logger. However, if you do, it is not only prefered, but you have taken the first step toward anabling your application towards Avalon's features. I don't doubt that IBM can hire capable programmers that can write scalable software.

<ras>
We like to think we defined scalable solutions :-)
Seriously, it's not a matter of skills, its a matter of
planning, direction, and various other factors.
</ras>



> Then let them take advantage of Avalon's API.  Eventually, they may have
> to anyway.  JSR-111 (Java Services Framework) is aimed at J2EE servers
and
> other servers to plug in new services--middleware and otherwise.  All the
> frameworks mentioned in the JCP overview (including Avalon) are built
with
> the same design principles.
>
> You may think I am being flippant, but I'm not.  Every project that has
> decided to use Avalon Framework/Excalibur has only responded with
positive
> feedback.  Most of them rave about how easy it is to keep the system free
> from lifecycle mismanagement bugs and other systemic bugs.  I haven't
heard
> anything beyond the learning curve issue--which is now made much smaller
> with decent documentation.  Abandoning our design principles and patterns
> would be a detriment to everyone involved.
>
> <ras>
> Not an option.  I'm not being flippant either, but I feel as though I'm
> being told that "it's my way or the highway".  I hope I'm not comming
> across that way, I just want something that works for our requirements
> (just like you), and that's what I'll get in the end.  I'd prefer that it
> be based on something already out there, if we can resolve the issues.
If
> not, then I'll end up with an n-th API.
> </ras>


It sounds like you are hung up on IoC, when all you really want is the Logger interface. In the end, the Logger interface is all you need for your purposes. If you don't like Avalon's preferred method of providing the Logger instance to the Components, then you are free to invent your own.

I must reiterate that requiring us to change our API to violate our design
principles is not an option.  In that respect, you are right, it is our
way or the highway.  If you would like to augment our loggers and provide
an
alternate way of obtaining them, then knock yourself out.



> It's a philosophy built into the API.  If you want to extend our API, and
> defeat all the protection we have in place, knock yourself out.  It won't
> be Avalon, and it will most likely create issues later down the road.
> Asking
> the Avalon team to abandon their design principles "for just this piece"
> is rediculous.  It's not going to happen.
>
> <ras>
> Right, It won't be Avalon.  But I'd still like to use the logging
> framework.
> </ras>


Then adopt the logging part of the framework--you will have some extra interfaces and classes lying around, that you will inevitably want to use later. (I'm being optimistic).


>>logging frameworks: very similar, but one based on LogKit/IoC, and the >>other based on Log4J. The advantage to one framework is it might help >>force Ceki's hand. >> > > > Look, I don't want to force anyone's hand. The Avalon Framework was kind > enough to allow an abstraction layer so that you can use Log4J or LogKit > with new development. If you use Avalon, you have bought the concept of > IoC and SoC. You can defeat the whole IoC by creating a static class with > access to the root logger--I would advise against this, but it is possible.


I still don't see where there are required 2 frameworks.



>>(I'm NOT using IoC, nor am I in a position to introduce into my
>>internal/legacy logging API's, middleware, etc).
>
> Are you NEVER going to use IoC?  An API isn't very useful if it doesn't
> discoruage bad design.
>
> <ras>
> Not until the WebSphere application server adopts it... and I'm not
> writting the application, just working in my small corner of the room.
> </ras>


A little evangelism goes a long way... :)

<ras>
And I'll be happy to evangelize as I learn more, and if I can see benefits
beyond what we currently have.  Not to say they are not there, just that
I've got a lot to learn.  And I appreciate you patience with me.
</ras>


>>Here again, I would note that the factory proposed by Peter appears to >>allow me to specify the category name. What is to keep me from calling >> > the > >>factory with a different category name whenever I needed? Doesn't that >>break IoC?


I can tell you now exactly how Peter envisioned it's use (because I know him):

We are talking about two contracts, both follow IoC.  Let me expound on
this.
The first contract is the one explicitly in Framework (setLogger(Logger)).
This one we both understand.  The second contract is with the
LoggerFactory.
The LoggerFactory is set up _BY_A_PARENT_CLASS/COMPONENT_.  It is then used
by the parent to get references to the Logger that a particular child
needs.
This SAME instance can be used by child instances that have children.

Therefore, your root instance which is the container of containers sets up
the InitialLoggerFactory for all of it's children.  It passes the
InitialLoggerFactory to it's child containers, which in turn use it to set
the logger for their children.

It is still IoC, and it allows category hierarchies that do not match the
component heirarchies.

With the example he described, it looks very similar to (if not ripped
directly
from) the JNDI approach.  You are able also to use JNDI to get your
precious
Logger instances.  This reduces the amount of code you need to create,
let's
the JNDI system set up and configure the loggers, and your
components/javabeans/
whatever can get the Logger instance from JNDI.  That approach seems more
like
what WebSphere is looking to do with their system anyway.

<ras>
I don't see how use of logger categories applies to obtaining a logger
reference from JNDI.  JNDI will give me existing objects, not go to a
factory if it cannot find it...
I think I'm missing something again.
</ras>


> <ras> > Peter wrote, in an earlier note: > ************* > Heres something I wrote in earlier mail. > > ---------------- > > My proposal for an abstraction layer was originally the below LogFactory > and > the Logger interface in Avalon repository. The LoggerFactory would behave > like JNDi in that it could accept a map that has parameters. The default > values of map would be populated by a config file in the Classpath. > > interface InitialLoggerFactory > { > Logger getLogger( Map map ) throws NoSuchLoggerException; > } > > example usage. > > Hashmap map = new HashMap(); > map.put( LoggerFactory.NAME, "some-category-name" ); > map.put( LoggerFactory.CONFIG_URL, "file:/some/config/file.txt" ); > map.put( LoggerFactory.FACTORY_IMPL, "com.biz.LogKitLoggerFactory" ); > > InitialLoggerFactory factory = new InitialLoggerFactory(); > Logger initialLogger = factory.getLogger( map ); > > another usage that just used defaults sucked in from entries in ClassLoader > > would be > > InitialLoggerFactory factory = new InitialLoggerFactory(); > Logger initialLogger = factory.getLogger( new HashMap() ); > > > -- > Cheers, > > Pete > ************* > </ras> > > > -- > > "Those who would trade liberty for > temporary security deserve neither" > - Benjamin Franklin > > > > > . > >



--

"Those who would trade liberty for
  temporary security deserve neither"
                 - Benjamin Franklin





*******************************************
Richard A. Sitze            [EMAIL PROTECTED]
CORBA Interoperability & WebServices
IBM WebSphere Development

.


--

"Those who would trade liberty for
 temporary security deserve neither"
                - Benjamin Franklin


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



Reply via email to