4

我有一个用 Spring MVC 编写的非常大的应用程序。我想保留一个“活动记录”,将用户在我的应用程序中所做的事情记录到数据库中。

在第一阶段我只想要一个活动日志,它可以只是在用户操作期间被调用的控制器方法的列表,但后来我希望这个信息更“人类可读”,即而不是“modifyAccount( accountId = 5, accountBalance =500) 类似于“用户 X 将账户 5 的余额更新为 500”。

我看到的问题是,由于我的应用程序非常大,我不想修改我的每个操作以添加此日志记录机制。有没有更灵活的声明方式来做到这一点?

4

1 回答 1

9

您可以使用面向方面的编程 (AOP) 来自动化日志记录。

http://static.springsource.org/spring/docs/2.0.8/reference/aop.html

在上面的页面中展示了许多关于如何将 AOP 与 spring 一起使用的示例。一个示例是使用注释来查找您感兴趣的方法。使用此类注释是确定应记录哪些方法的一种简单方法。

@Audit 注释

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Auditable {
    ...
}

审计方法

@After("@annotation(auditable)", argNames="joinPoint")
public void audit(JoinPoint joinPoint) {
    logger.info("Called {} with arguments {}", 
        joinPoint.getSignature().getLongString(), joinPoint.getArgs());
}

我没有测试这段代码,但它明白了这一点。

于 2013-08-05T06:49:05.290 回答