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]

Reply via email to