您的位置:首页 > 编程语言 > Java开发

如何处理日志和业务逻辑的困惑

2007-03-22 00:10 841 查看
     如果处理日志和业务逻辑成为目前解耦的一个难题。在项目中,往往会发现书写日志的代码往往会大于真正的业务逻辑代码,造成代码阅读上的困难。然而,把日志从应用逻辑中分离出去却有非常困难。

        当前,流行的分离日志和业务逻辑的方法是使用AOP,从另一个角度来说,也是AOP应用较多的领域之一。但是,使用AOP进行日志分离也有着严重的问题。当前AOP主要分为Spring的无内浸性AOP,以及AspectJ的内侵式AOP。使用AspectJ,需要专门的AspectJ编译器,这个让很多JAVA程序员无法接受。使用Spring的AOP的话,由于Spring的AOP是基于JAVA的动态代理功能上构建的,只能在方法的前后进行AOP插入,限制了其应用的范围,尤其是对于日志信息来说,仅仅在方法调用前后记录日志,肯定是不够的。
        因此,当前情况下,如果不使用AspectJ,要把日志代码全部分离出去,不太现实。

       如果AOP的方法暂时不可行,那么,换一个角度来说,我们不把日志信息与逻辑代码相分离,那么日志信息应该写在什么地方。以OO的角度来看,数据进行封装,不应从外部直接访问类中数据,那么,处理日志信息的代码就要写在每个类里,这样,造成的后果是每个类都要记录自己的信息,都与日志模块耦合在了一起。这也是我们所不希望看到的。虽然当前的AOP技术不能完全解决日志分离的问题,我们仍然希望,把日志信息的记录集中在一,二个模块中,或者,几个“切面”中。

     当然,我们可以使用Observer模式来解决这一问题,让日志记录与应用逻辑相对的解耦,然而,Observer模式太过重型,你总不希望写每个类的时候都要来实现一下Observer模式把。

   同时,在此提出新的问题,软件的正常运行,需要监控其稳定性,性能等指标。这就需要我们提供相应的接口来记录这些信息。这些信息与日志信息的情况相同,在整个系统中广泛存在。同样存在着如何提供接口,如何记录的问题。

    至此,这个问题还处在迷茫中,准备读几个开源项目的源码,看看大家都是怎么处理这一问题的,希望能有说收获。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  aop spring java 编译器 oo