【发布时间】:2014-12-03 17:38:02
【问题描述】:
我需要使用 logback 和 AspectJ 将应用程序中每个方法的运行时间记录到数据库中。这是一个企业应用程序,大约有几千个类,每个类中平均有大约 10 个方法。
我在这里遇到了主要的性能问题吗?我知道记录每一种方法都太过分了,但现在让我们先回顾一下。
【问题讨论】:
标签: performance aspectj logback
我需要使用 logback 和 AspectJ 将应用程序中每个方法的运行时间记录到数据库中。这是一个企业应用程序,大约有几千个类,每个类中平均有大约 10 个方法。
我在这里遇到了主要的性能问题吗?我知道记录每一种方法都太过分了,但现在让我们先回顾一下。
【问题讨论】:
标签: performance aspectj logback
数千个类,每个类大约有十个方法,您必须为所有类实现跟踪日志记录?
简短回答: 是的。
长答案:
是的。
您的表现将(或多或少)受到严重影响。要记录方法的运行时间,您需要(最少)一个环绕建议,该建议在方法进入和退出时花费时间,构造一个字符串并将其发送到记录框架。取决于你的数以万计的方法做什么,其中很多可能比方法的实际执行更耗时 - 方法越小开销越大。
我不能代表您的应用程序,但是在为我的一个应用程序执行此操作后,激活跟踪的实际网络性能几乎减半。这是否也适用于您的应用程序,或者是否属于您的“主要性能问题”,只有您自己知道。
因此,我的建议是简单地尝试一下。围绕命名空间中的每个方法编织跟踪建议可以很容易地完成。然后只需比较跟踪和未跟踪应用程序之间的性能即可。
【讨论】:
if() 切入点随意(取消)激活方面。您还可以创建一个抽象的基本方面来执行所有跟踪魔术,然后扩展几个具体的子方面来覆盖抽象切入点,该切入点实际上定义了您要拦截的目标类型。通过这种方式,您可以为多个日志记录、跟踪、分析或调试方案做好准备。我只是喜欢用 AspectJ 来做这件事。