使用AOP进行日志记录时,我们是应该将所有日志记录保存在一个类别中还是分成多个?

时间:2014-07-15 17:23:19

标签: logging aspectj aop

我正在尝试以日志记录的形式将AOP引入项目。我还没有找到答案的一件事是如何处理非常大的方面。

看起来很直观,日志记录只是一个方面。毕竟,这是一个通常横切到许多类的问题(因此AOP为什么是有益的)。但是如果我们将所有日志记录放在一个方面,我们最终会得到一个非常大的文件,我担心这个文件很难组织起来。

其他项目如何使用方面处理日志记录以及他们的方法的优缺点是什么?

1 个答案:

答案 0 :(得分:1)

您有多种选择。我想到的一些是自发的:

  • 使用单例方面(这是默认值)并保留每个类或每个包的记录器映射。这很容易实现,但是有一些运行时开销,因为您需要动态确定当前正在执行的对象的类型。
  • 使用pertypewithin()对象实例化并将记录器声明为方面的实例变量。这将为每种类型创建一个记录器。
  • 使用ITD (inter-type declaration)创建一个具有getLogger()方法的默认实现的接口。然后让所有目标类通过ITD实现接口。最后但同样重要的是,请在您的建议中使用该方法。

所有这三种解决方案都非常简单易用。了解最符合您需求的产品。也许第二个是最干净的,但如果你有很多目标类,它会创建许多方面实例。您可以使用内存分析器(例如VisualVM)自行测试。我知道它被打包成新的JDK,但我建议下载一个独立的版本,因为它附带了更多的插件,据我记得上次使用它时。您还可以使用VisualVM远程配置文件,BTW。