我一直在与一家公司的代码库合作,该公司的政策是编写大量跟踪日志。所以几乎每个方法都有一段这样开头的代码:
String LOG_METHOD = "nameOfMethod(String,List<Long>):void";
if(logger.isTraceEnabled()) {
Object[] params = new Object[] { string, list };
logger.trace(CompanyMessages.newMethodInstanceMessage(this, LOG_METHOD, params));
}
并像这样结束(在 -finally
子句中或仅在方法的末尾:
if(logger.isTraceEnabled()) {
logger.trace(CompanyMessages.leaveMethodInstanceMessage(this, LOG_METHOD));
}
实际上还有更多代码,但这是基本思想。这使代码变得混乱,其他编码人员不断地用他们自己的解释来搞乱它,这些解释不使用特定的CompanyMessages
类来格式化要由监控工具读取的消息。所以我正在寻找一种方法来摆脱上面的所有代码,只提供所有需要跟踪记录的方法,并带有如下注释:@LogBefore('logLevel')
& @LogAfter('logLevel')
。
我选择这个解决方案的原因是为了让其他开发人员不必学习任何新东西,只需使用注释而不是代码。我在一个服务器环境中工作,我们在其中部署了数百个 Web 应用程序和数十个开发人员。所以我一直在寻找一种方法来在 Web 应用程序中实现这一点,而无需大量额外的编码或额外的大型库。这意味着我正在寻找一个小型、稳定的 AOP 实现,使用类似于我建议的注释,易于在每个 Web 应用程序中配置。性能也很重要。用 AOP 实现这个的最简单的例子是什么?
编辑:我确实找到了与我正在寻找的东西非常相似的东西,但这有几个问题。必须配置所有需要记录的类,这将比仅使用注释更占用资源。弹簧配置会<aop:aspectj-autoproxy/>
解决这个问题吗?