AOP – Logging all method calls and executions in Java with AspectJ
This is not a walk-thru. This is just an example AspectJ class.
Note: For logging, the log singleton which I previously posted is used, but of course you can hook this up to your own logging methods or just print to the console.
This class is intended to log when a method executes and when a method ends. Methods inside are tabbed.
package mainExample;
import org.aspectj.lang.JoinPoint;
public aspect AspectLogMethodExecution
{
private int tabCount = 0;
pointcut AnyMethod() : (call(* *.*(..)) || execution(* *.*(..)))
&& !within(AspectLogMethodExecution)
&& !within(Log);
before() : AnyMethod()
{
PrintMethod(thisJoinPointStaticPart);
tabCount++;
}
after() : AnyMethod()
{
tabCount--;
PrintMethod(thisJoinPointStaticPart);
}
private void PrintMethod(JoinPoint.StaticPart inPart)
{
Log.WriteLine(GetTabs() + inPart);
}
private String GetTabs()
{
String tabs = "";
for (int i = 0; i < tabCount; i++)
{
tabs += "\t";
}
return tabs;
}
}
So if you have a simple Hello, World app, this is the log output.
execution(void mainExample.Main.main(String[])) call(void java.io.PrintStream.println(String)) call(void java.io.PrintStream.println(String)) execution(void mainExample.Main.main(String[]))
Return to Aspected Oriented Programming – Examples


[...] This class is intended to log when a method executes and when a method ends and include the time it took for a method to execute in nanoseconds. Methods inside methods are tabbed. This is an enhancement to this post: AOP – Logging all method calls and executions [...]