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]