logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jensen, Jeff" <Jeff.Jen...@state.mn.us>
Subject RE: Log based on object and not the class
Date Thu, 11 Dec 2003 17:14:16 GMT
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:smelcher@assistcorp.com]
> 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: log4j-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: log4j-user-help@jakarta.apache.org
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: log4j-user-help@jakarta.apache.org


Mime
View raw message