Java 集中应用程序日志的优点和缺点是什么?

Java 集中应用程序日志的优点和缺点是什么?,java,aop,aspectj,spring-aop,Java,Aop,Aspectj,Spring Aop,我希望了解使用AOP(例如使用AspectJ)将所有应用程序日志集中到单独文件中的利弊 。然而,我从未见过任何人将所有日志集中到一个或一堆文件中。因此,我想知道为什么 这样做的利弊是什么 我希望了解集中所有资源的利弊 应用程序使用AOP(例如,使用AspectJ)登录到单独的文件中 我将交替使用术语AOP和AspectJ。尽管如此,AOP是范例,AspectJ实现了它,就像OOP和Java一样 使用将横切关注点(CCC)集中到它们自己的模块(例如方面)中的好处与使用OOP的模块化关注点类似。这些

我希望了解使用AOP(例如使用AspectJ)将所有应用程序日志集中到单独文件中的利弊

。然而,我从未见过任何人将所有日志集中到一个或一堆文件中。因此,我想知道为什么

这样做的利弊是什么

我希望了解集中所有资源的利弊 应用程序使用AOP(例如,使用AspectJ)登录到单独的文件中

我将交替使用术语AOP和AspectJ。尽管如此,AOP是范例,AspectJ实现了它,就像OOP和Java一样

使用将横切关注点(CCC)集中到它们自己的模块(例如方面)中的好处与使用
OOP
的模块化关注点类似。这些好处在论文和书籍的文献中有描述,例如:

还有很多其他的。我们可以将其中的一些好处总结如下:

  • 减少代码重复功能(如日志记录)不是在多个不同的地方复制,而是在一个方面复制。然后,可以使用切入点的概念将该功能应用到这几个地方
  • 减少域相关和横切相关关注点之间的耦合(即关注点分离);例如,从域代码中删除日志记录遵循以下步骤:
  • 提高代码重用性由于前面提到的关注点分离,一个(例如)增加了封装基于代码的模块和封装日志的模块的可重用性
  • 处理代码;如下图所示

日志1和日志2不是直接与域代码纠缠在一起,而是在不同的模块(即,
A类
B类
)之间重复和分散,我们将这些与日志相关的功能封装到一个方面

文献中有一些关于AOP在横切关注点(如日志)模块化方面的好处的论文,即:

S.坎迪特和M.冈特。现实世界中面向方面的日志记录 系统。在关于方面、组件和模式的第一次AOSD研讨会上 基础设施软件(AOSD-2002),2002年3月

人们可以从文献中看到AOP的缺点,即:

  • 雇佣熟练的程序员
  • 遵循采用路径,确保您不会因为过度扩展自己而冒项目风险
  • 修改构建和其他开发过程
  • 处理工具的可用性
报纸报道的其他不利因素,如:

  • (这是一个特别好的演示,展示了使用AOP的一些问题
可概括为:

  • 必须学习一种新的范式

  • 缺少工具支持

  • 织造的性能

  • 由于与CCC相关的代码被移到了其他地方,因此更难对代码进行推理。例如,相同的参数可以应用于子类化或装饰模式的使用。但是,IDE通过显示被截获的连接点来缓解这些问题。
    AspectJ
    例如,r解决方案是使用注释并截取这些注释:

    @伐木 public void some_method(){…}

当程序员看到注释时,立即知道该方法正被切入点截获。这种方法的缺点是,您可能会再次将CCC与域代码混合,尽管只是以注释的形式

另一方面,有人可能会说,由于与域相关的关注点和CCC现在封装在不同的模块中,因此更容易孤立地对它们进行推理

  • ;此问题类似于。从中可以看出:
对基本代码的更改可能会导致连接点错误下落 在切入点的范围之内或之外

例如,添加新方法或更改其签名可能会导致切入点拦截它们或停止拦截它们。有一些技术可以缓解此类问题。但是,在我的选择中,解决方案是工具。在Java中重命名方法时,希望IDE安全地应用这些更改

  • 使用AspectJ时joinpoint模块的粒度(使用Spring AOP时更糟)可能很难获得日志记录所需的本地上下文,例如本地变量,这可能会迫使您重构代码,以便能够公开所需的连接点--。另一方面,重构代码实际上可能会改进它。发件人:可以阅读:
用户有时希望AspectJ挑选更多的连接点, 包括方法局部字段访问、数组元素访问、循环迭代、方法参数评估

事实证明,对于许多人来说,其中大多数都没有意义 原因:它不是Java程序员通常理解的单元

  • 在连接点上提供建议的用例很少

  • 对基础程序的看似微不足道的更改会导致 连接点中的更改

  • 切入点不能真正区分所讨论的连接点

  • 对于的不同实现,连接点的差异太大 AspectJ或只能以一种方式实现

我们倾向于在连接点模型中对 语言,因此新的连接点必须是有用的、合理的和可靠的 可实现的。最有前途的t