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]
https://dev.eclipse.org/mailman/listinfo/aspectj-users