Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [aspectj-users] general tracing aspect

FYI:

>From looking at the source code for the Jakarta Commons logging project,
it looks like the Logs are already cached in a Map by LogFactory, so in
that case the only overhead is the actual call to getLog(...)

Log4j on the other hand, appears to do considerably more work to
retrieve a logger.  Fortunately, the Jakarta Commons logging project can
be used as a wrapper for Log4j and do this caching for us.

So if your aspect will assume it's using the Jakarta Commons logging,
there's maybe not much point to complicate it's code by adding another
layer of caching.

-- Marc


On Wed, 2003-04-23 at 08:17, Jon Cundill wrote:
> Hi,
> 
>  we use something like
> 
>     public static void traceEntry(Signature sig) {
>     	Log log = LogFactory.getLog( sig.getDeclaringType() );
>     	if( log.isDebugEnabled() )
>     	{
>     		log.debug( "ENTERED " + sig.getName());
>     	}
>     }
> 
> This is for jakarta commons logging, but I would think plain Log4j would
> work similarly.
> To stop the overhead of getLog() on every invocation, lazt init the Logs
> into a Map held as an instance variable in the aspect and
> keyed on the Class retrieved from sig.getDeclaringType().
> 
> Jon
> 
> -----Original Message-----
> From: aspectj-users-admin@xxxxxxxxxxx
> [mailto:aspectj-users-admin@xxxxxxxxxxx]On Behalf Of Nuno Oliveira
> Sent: 23 April 2003 14:50
> To: rhill@xxxxxxxxxx
> Cc: aspectj-users@xxxxxxxxxxx
> Subject: RE: [aspectj-users] general tracing aspect
> 
> 
> Your reply was most welcome! thanks :)
> 
> The solution you provided solves the problem of the class name to use in
> advice but doesn't comply with my whish to have a single Logger instance per
> class. This way every class will be logging to the same logger (the defined
> one). What I would need would be a way to create a static logger instance
> per-class using a type patern instead of a specific Type or a way to specify
> that the logging is to take place in the logger variable that each class
> already has.
> 
> Thanks again.
> Nuno
> 
> -----Original Message-----
> From: Gilles DODINET [mailto:rhill@xxxxxxxxxx]
> Sent: Wednesday, April 23, 2003 1:20 PM
> To: Nuno Oliveira
> Subject: Re: [aspectj-users] general tracing aspect
> 
> 
> what about something like
> 
> interface Loggable {}
> declare parent : my.package.* implements Loggable;
> 
> //init logger as soon as possible (<init> ? <clinit> ?)
> private Logger Loggable.anotherLogger;
> 
> pointcut method(Loggable o) :
>                within(Loggable+)
>                && execution(* *(..))
>                && this(o);
> 
> before(Loggable o): method(o)
> {
>  	     o.anotherLogger.enter(
> 
> thisJoinPointStaticPart.getSignature().getName() ,
>   		               thisJoinPoint.getArgs());
> }
> 
> i have not tested it, tho i think that it should work, with quite little
> modifications. please provide me with some feedbacks :)
> 
> -- gd
> 
> 
> > Message du 23/04/03 12:40
> > De : Nuno Oliveira <noliveira@xxxxxx>
> > A : aspectj-users@xxxxxxxxxxx
> > Copie à :
> > Objet : [aspectj-users] general tracing aspect
> > Hello all,
> >
> > I have a bunch of classes each with its own static instance of a log4j
> > logger. This instances all have the same name 'logger'. I want to add
> > enter-leave tracing to each of the methods of all classes but would be
> > interested in making this with a single aspect. However I'm having trouble
> > with the sintax to refer to the logger in my advice, without using the
> class
> > name -which would defeat the purpose. I cannot use type patterns in
> advice,
> > rigth ? Can anyone provide any hints ? Using aspectJ, a sintatically wrong
> > expression of my needs would be:
> >
> > package my.package;
> >
> > privileged aspect TraceEnterLeave
> > {
> > 	pointcut method(): within(my.package..*) && execution(* *(..));
> >
> > 	before(): method()
> > 	{
> >
> >
> (my.package..*).logger.enter(thisJoinPointStaticPart.getSignature().getName(
> > ) ,
> > 		thisJoinPoint.getArgs());
> > 	}
> >
> > 	after() returning(Object o): method()
> > 	{
> >
> >
> (my.package..*).logger.leave(thisJoinPointStaticPart.getSignature().getName(
> > ), o);
> > 	}
> > }
> >
> > A related question would be how to migrate the static logger declaration
> in
> > each class to that tracing aspect ? Could I use a type pattern to get the
> > class name to instatiate each logger ?
> >
> > Thanks in advance.
> >
> > Nuno
> >
> > _______________________________________________
> > aspectj-users mailing list
> > aspectj-users@xxxxxxxxxxx
> > http://dev.eclipse.org/mailman/listinfo/aspectj-users
> >
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users
> 
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> http://dev.eclipse.org/mailman/listinfo/aspectj-users


Back to the top