Jensen, Jeff
Thu, 11 Dec 2003 10:54:52 -0800
FYI - I just saw Ceki's example and it is the same as my #1.
> -----Original Message-----
> From: Jensen, Jeff
> Sent: Thursday, December 11, 2003 11:14 AM
> To: 'Log4J Users List'
> Subject: RE: Log based on object and not the class
>
>
> I have a couple of thoughts for you, but both violate at
> least one restriction you placed on the solution! The ideas
> may lead you to something better than you currently have though.
>
> 1) Use "Template Method" pattern.
>
> You mentioned not wanting to change code, and this solution
> does require that. Yet I suggest it as an alternative (an
> inverse) to the other suggestion to pass in the child's
> logger to the parent method. This approach enables gradual
> implementation as the parent's methods signatures do not
> change (which obviously would cause an immediate change to
> all callers of a method).
>
> For example, in the parent class, create a method:
> protected Logger getChildLogger()
> {
> return LOG;
> }
>
> By default, it returns its own logger. Have the subclasses
> override that method to return their own logger.
>
> Then, in the parent class' methods you want to log to the
> child's logger, call that method to get it first. Until a
> subclass overrides that method, there is no change from
> current behavior.
>
> When you get to the point of having all subclasses override
> the getChildLogger() method, then make the one in the parent
> class abstract to guarantee each subclass having an implementation.
>
>
> 2) Use a "TRACE" like behavior. At the beginning of each
> method, log this:
> LOG.debug("methodName: begin")
>
> and at the end of each method, log this:
> LOG.debug("methodName: end")
>
> Then you will know that all log calls in between those two
> messages for a given user [solve with NDCing the user name]
> were as a result of executing that method. This of course
> requires the parent class' messages turned on, which also
> violates something you said you did not want - too many from it!
>
>
> > -----Original Message-----
> > From: Scott Melcher [mailto:[EMAIL PROTECTED]
> > Sent: Thursday, December 11, 2003 9:47 AM
> > To: 'Log4J Users List'
> > Subject: Log based on object and not the class
> >
> >
> > Hi, my problem is that in my object architecture/hierarchy I
> > have dozens of
> > classes that extend a single parent class. The parent class
> > has a method
> > that is called by all of the child classes. It is in this
> > method that I
> > have several log statements. The problem is that I only have
> > the ability to
> > turn the logger on or off for that parent class. If I turn
> > it on then I
> > will get too many logging messages. I would only like to log
> > messages in
> > that parent class for a given child class.
> > I know I am not explaing this well so I will add a quick
> code example.
> >
> > In my example I only want to log messages from the Child1
> > class. Therefore
> > if I was to execute my two child classes I would want to
> get a single
> > "logging message".
> >
> > Class Parent {
> > ...
> > Public void myMethod() {
> > Logger.debug("logging message");
> > }
> > }
> >
> > Class Child1 extends Parent {
> > ...
> > Public void execute1() {
> > this.myMethod();
> > }
> > }
> >
> > Class Child2 extends Parent {
> > ...
> > Public void execute2() {
> > this.myMethod();
> > }
> > }
> >
> > THANKS for any input you can give!
> >
> >
> >
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]