Hi Olle,
I actually removed some information just to keep things focused.  I am also 
tagging the log statements with unique ids and adding user names etc.  You are 
right that what I posted could be done directly in log4j but the other stuff i 
just mentioned cannot.

Abhi
________________________________
From: [email protected] [[email protected]] on 
behalf of Olle Hallin [[email protected]]
Sent: Monday, May 30, 2011 12:29 PM
To: [email protected]
Subject: Re: [aspectj-users] Puzzling problem using AspectJ

I'm just curious, but why do this with an aspect?

It's a standard feature in Log4j.

Use %c for the classname and %M for the method name in the conversion pattern 
in log4j.xml or log4j.properties
There is probably also some placeholder for the line number, but I cannot 
remember which from the top of my head.

Olle Hallin
Senior Java Developer and Architect
[email protected]<mailto:[email protected]>
www.crisp.se<http://www.crisp.se>
http://www.linkedin.com/in/ollehallin



2011/5/30 Andy Clement 
<[email protected]<mailto:[email protected]>>
Hi,

So you are not loadtime weaving, you are just compile time weaving.
The weaveinfo messages indicate the bytecode is being modified.  I
guess you could check the woven output from the compile and verify the
calls to the logger have been advised.  Using 'javap -private
-verbose' against a class in the woven output you should see wherever
there is a call to getLogger there is a call to the advice?

Actually, one thing does seem unusual.  Is your pointcut definetly just this:

call(* org.apache.log4j.Logger.*(..)) && !within(*..*Aspect);

and in a singleton aspect?

Because that can be fully statically matched, so I don't understand
why your weaveinfo message is suffixed with '[with runtime test]'.  If
the runtime test (whatever it is) is failing it will not be running
your advice.  If you want to post the snippet of bytecode around the
calls to getLogger we can check what the runtime test is.

Andy

On 27 May 2011 15:07, Abhijit Inamdar 
<[email protected]<mailto:[email protected]>> wrote:
> I am trying to use AspectJ for tracing and I have hit the wall trying to 
> figure out this problem.  I have a prototype where my code works but it does 
> not work with the "real" project.  What I am trying to do is to prefix log 
> statements with some additional information(class, line number etc).
> Here is the code:
>        pointcut logCall() : call(* org.apache.log4j.Logger.*(..)) && 
> !within(*..*Aspect);
>
>        before() : logCall() {
>                MDC.put(MDC_KEY,  " (" + 
> thisEnclosingJoinPointStaticPart.getSourceLocation()
>                                + ") " + 
> thisEnclosingJoinPointStaticPart.getSignature().toShortString());
>        }
>
>        after() : logCall() {
>                MDC.remove(MDC_KEY);
>        }
>
> In the prototype this works fine giving the following output(for example):
> 2011-05-27 14:44:04,474 [main]  WARN    -  (CommChannel.java:18) 
> CommChannel.doComm(..) Delivering message by channel
>
> where "Delivering message by channel" is the original logged message and 
> "(CommChannel.java:18) CommChannel.doComm(..)" was prefixed by the aspect 
> code shown above.
>
> However when I move this to my "real" project this does nothing.
>
> Compiler output seems to indicate that it is finding the right join points.  
> For example:
>
> [INFO] Join point 'method-call(org.apache.log4j.Logger 
> org.apache.log4j.Logger.getLogger(java.lang.Class))' in Type 
> 'com.mycompany.myapp.plugins.MyClass' (MyClass.java:55) advised by after 
> advice from ''com.mycompany.myapp.aspects.tracing.MyAspect' 
> (myaspects-2.0-SNAPSHOT.jar!MyAspect.class:65(from MyAspect.aj)) [with 
> runtime test]
>
> However the original log statement is logged without my aspect prefix.  
> Attaching a debugger to the process shows that it never enters the before or 
> after advice.  This means if I remove the MDC code and simply enter log 
> statements into the before & after advice they are still never hit(i.e. the 
> issue is NOT with MDC).
>
> I am running:
> Ubuntu 10.4 (Kernel Linux 2.6.32-31-generic)
> Tomcat 6.0.32
> Maven 2.2.1 with AspectJ dependencies
>                <dependency>
>                        <groupId>org.aspectj</groupId>
>                        <artifactId>aspectjweaver</artifactId>
>                        <version>1.6.10</version>
>                        <scope>compile</scope>
>                </dependency>
>                <dependency>
>                        <groupId>org.aspectj</groupId>
>                        <artifactId>aspectjrt</artifactId>
>                        <version>1.6.10</version>
>                </dependency>
>
> <plugin> ...
>                                <artifactId>aspectj-maven-plugin</artifactId>
>                                <version>1.3.1</version> ... etc
>
>
>
> PLEASE NOTE:  I am able to get tracing to work in the "real" app.  It just 
> doesn't work with the above log4j pointcut.
>
> Sorry about the very long post but I am really out of ideas, so any pointers 
> for further investigation will the great.
> _______________________________________________
> aspectj-users mailing list
> [email protected]<mailto:[email protected]>
> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>
_______________________________________________
aspectj-users mailing list
[email protected]<mailto:[email protected]>
https://dev.eclipse.org/mailman/listinfo/aspectj-users

_______________________________________________
aspectj-users mailing list
[email protected]
https://dev.eclipse.org/mailman/listinfo/aspectj-users

Reply via email to