使用Spring AspectJ进行日志记录的性能影响

时间:2014-10-10 10:26:59

标签: java spring aspectj spring-aop

我们正在开发一个Web应用程序,我们在DAO类中记录所有数据库调用的输入和输出。一个例子是:

@Override
public List<Long> findUsers(final List<Long> userIds) {
    LOGGER.info("findUsers: finding user ids  by  followeeId {} ", userIds);
    ... // hibernate DB call
    LOGGER.info("findUsers: number of ids  founds are {}", userIdList.size());  

此代码将出现在所有DAO类中,此类的数量大约为100,并且可能会更高。

我的问题是我们是否应该以相同的方式继续记录信息,还是应该使用Spring-AspectJ实现? - 对于所有此类方法,我们将为@Before@After定义一个方面。此方面将调用记录器并记录所需的信息。

实施Spring-AspectJ是否会受到性能影响?任何指针都表示赞赏。

我已经完成了以下SO问题,但是对于上面引用的示例需要更加明确。

2 个答案:

答案 0 :(得分:3)

使用AOP会给你一个小的性能损失,多少取决于你如何应用AOP(代理或编织)以及你在你方面做了什么。我建议使用Springs CustomizableTraceInterceptor或者如果你也感兴趣(或者对表现更感兴趣的话,AbstractMonitoringInterceptor的子类之一可以节省你自己的实现。

我不会按照您的方式登录,因为它很容易忘记,如果您想要更改某些内容(或禁用日志记录),您必须更改这100个类而不是1或仅配置。 / p>

答案 1 :(得分:0)

如果你使用spring aop会降低你的性能,除非你使用带有aspectj的弹簧,它会更好地检查这里 http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/aop.html