传统日志记录与AOP日志记录

时间:2009-10-12 17:48:23

标签: logging aop

我正在启动这个新项目,我们正在逐步完成我们的日志记录/调试方法,我想在SO上向其他人提出问题,给出

private final static Logger logger = LoggerFactory.getLogger(getClass());
...
public void doSumething(){
...
if(logger.isDebugEnabled())
    logger.debug("...");
}

 @After("execution(* *.doSomething())")
    public void logAfter(JoinPoint jp){
        logger.debug("...");
    }

AOP方法真的比使用传统方法更好吗?或者AOP在特定用例中是否优于日志记录/分析?

4 个答案:

答案 0 :(得分:28)

对于性能而言,AOP方法肯定比传统方法略有开销。

AOP的众多优势之一是它允许您将非业务问题与业务逻辑分开。它还可以帮助您完成平凡的任务,例如在每个方法中放置一个日志记录逻辑,或者在每个方法上放置一个try-catch语句。

我认为真正的问题是,如果性能开销(根据我的经验,这只是最小的)将弥补您在开发过程中必须经历的平凡任务。

一位朋友之前告诉我,最好是拥有一个可维护且可扩展的应用程序,而不是使用速度更快的应用程序来维护你。缓慢可以通过多种方式得到补偿,例如升级硬件等。

这只是我的两分钱,希望这会有所帮助。

答案 1 :(得分:9)

我不认为这些应被视为相互排斥的替代方案。

我认为AOP非常适合跟踪(即记录方法的进入/退出和参数值)。

我仍然使用常规记录:

  1. 对于信息/警告/错误消息
  2. 对于开发期间的调试消息,以查看某些变量的值或查看使用了哪个if / then路径等。

答案 2 :(得分:1)

我发现了面向方面的方法。将记录与逻辑分开是正确的。我不确定性能开销。

即使您决定不使用AOP,也有比这更好的记录方式:

  

如果(logger.isDebugEnabled())

查看log4j,它将使您能够更改日志级别,不同的appender和许多其他内容。

答案 3 :(得分:1)

我同意@daxsorbito的回答 - 并希望在此基础上进行构建。

  • 可以使用配置文件配置交叉建议,这样您就可以为生产日志记录提供不同的aop建议。这可以提高性能。

  • AOP可以减少大量代码混乱,并鼓励开发人员专注于主要任务。

  • 如果代码有足够的日志记录,很多调试会变得更容易。 AOP使其独立于开发人员。一些开发人员可能不会遵循足够的日志记录。或者可能觉得没必要。

  • 日志文件具有一致的消息。 (没有更多"你说土豆,我说batata ...... :)" ) - 每个开发人员可能会记录不同的样式。但是,如果我们AOP-fy它,你可以使它在整个应用程序中保持一致,并在其上轻松地提供很多好的分析。

  • 这也鼓励您编写可以轻松调试的小型可重用(如果有时可测试的话更好)。

  • 有时,这也会鼓励您遵循一致的命名约定,因为这样可以更容易地在调试期间应用建议来记录这些方法。