以下のようなアスペクトを作成します。pointcut ですべての public メソッドが実行されるようにしています。呼び出されたメソッドの情報は
thisJoinPoint で取得できます。
package logtest.aop.aspect;
import org.apache.log4j.*;
aspect MethodTraceForAll {
private static final Logger logger =
Logger.getLogger("logtest.aop.aspect.MethodTraceForAll");
pointcut methodTrace(): execution(public * *.*(..));
before(): methodTrace() {
logger.debug("entering:" + thisJoinPoint);
}
after() returning: methodTrace() {
logger.debug("exiting:" + thisJoinPoint);
}
}
以下の log4j のアペンダによって、
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:/log/example.log" />
<param name="Append" value="false" />
<param name="MaxFileSize" value="1MB"/>
<param name="MaxBackupIndex" value="10"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p - %m%n"/>
</layout>
</appender>
次のクラスを実行すると、
package logtest.aop;
public class Test1 {
public Test1() {
String param1 = "param1";
int param2 = 2;
int param3 = 3;
int[] param4 = { 1, 2, 3 };
Custom param5 = new Custom();
test1(param1);
test2(param2);
test3(param2, param3);
test4(param4);
test5(param5);
test6();
test7();
test8();
test9();
test10();
}
public void test1(String a) {
}
public void test2(int a) {
}
public void test3(int a, int b) {
}
public void test4(int[] a) {
}
public void test5(Custom a) {
}
public int test6() {
return 0;
}
public String test7() {
return "test7";
}
public String[] test8() {
return new String[] { "aaa", "bbb", "ccc" };
}
public String test9() {
return null;
}
private void test10() {
}
}
以下のログが出力されます。
DEBUG - entering:execution(void logtest.aop.Main.main(String[])) DEBUG - entering:execution(void logtest.aop.Test1.test1(String)) DEBUG - exiting:execution(void logtest.aop.Test1.test1(String)) DEBUG - entering:execution(void logtest.aop.Test1.test2(int)) DEBUG - exiting:execution(void logtest.aop.Test1.test2(int)) DEBUG - entering:execution(void logtest.aop.Test1.test3(int, int)) DEBUG - exiting:execution(void logtest.aop.Test1.test3(int, int)) DEBUG - entering:execution(void logtest.aop.Test1.test4(int[])) DEBUG - exiting:execution(void logtest.aop.Test1.test4(int[])) DEBUG - entering:execution(void logtest.aop.Test1.test5(Custom)) DEBUG - exiting:execution(void logtest.aop.Test1.test5(Custom)) DEBUG - entering:execution(int logtest.aop.Test1.test6()) DEBUG - exiting:execution(int logtest.aop.Test1.test6()) DEBUG - entering:execution(String logtest.aop.Test1.test7()) DEBUG - exiting:execution(String logtest.aop.Test1.test7()) DEBUG - entering:execution(String[] logtest.aop.Test1.test8()) DEBUG - exiting:execution(String[] logtest.aop.Test1.test8()) DEBUG - entering:execution(String logtest.aop.Test1.test9()) DEBUG - exiting:execution(String logtest.aop.Test1.test9()) DEBUG - exiting:execution(void logtest.aop.Main.main(String[]))