2011-03-29 68 views
3

我有一个巨大的Java项目,有大量的代码。让我们假设它看起来像:使用注释的Java代码工具

fn1(int arg1){...} 
fn2(int arg1,int arg2){...} 
fn23(){...} 
... 
fn134(){...} 

我想用注解来记录的功能每次调用:

@logme("arg1") 
fn1(int arg1){...} 
@logme("all args") 
fn2(int arg1,int arg2){...} 
fn23(){...} 
... 
fn134(){...} 

,并期望看到

fn1(arg1=223) 
fn1(arg1=213,arg2=46) 
在我的日志文件

你会如此友善地向我推荐一些工具吗?

史蒂夫

回答

2

你可以使用AspectJ的&任何日志框架来处理这一要求, 所以你需要做到以下几点:

1-创建注释内搭论据,你可能希望,甚至采取的参数不确定数字的字符串,并处理他们像'arg1=q,arg2=w,arg3=e'

2 - 您的新注释创建点切一个方面是这样

@Pointcut(value = "@annotation(loggableActivity)", argNames = "loggableActivity") 

注意,这里使用argNames将注释本身发送到处理程序方法,这样你就可以从它那里得到的参数一样'arg1=q,arg2=w,arg3=e',并且继续在方法调用之前处理它们

3-,登录你想了解它什么都,你可以从你的论点得到几乎所有需要的信息,

注释代码如下所示:

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
public @interface LoggableActivity { 
    String value(); 

    String args() default ""; 
} 

切入点代码如下所示:

@Aspect 
public class ActivityLogger { 

    private static final Logger logger = LoggerFactory.getLogger("activity"); 

    @Pointcut(value = "@annotation(loggableActivity)", argNames = "loggableActivity") 
    public void loggableUserActivity(LoggableActivity loggableActivity) { 

    } 

    @Around("loggableUserActivity(loggableActivity)") 
    public Object doLoggingUserActivity(ProceedingJoinPoint pjp, 
      LoggableActivity loggableActivity) throws Throwable {} 

然后里面doLoggingUserActivity你可以使用的方法,如

pjp.proceed(); proceed method call 
pjp.getArgs(); gets method arguments 
loggableActivity.args(); gets annotation argument as String 

然后使用记录器记录他们