我有一个包含大量代码的巨大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)
在我的日志文件中
你会如此善意地向我推荐一些工具吗?
史蒂夫
答案 0 :(得分:3)
答案 1 :(得分: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
然后使用记录器记录它们