如何处理日志和业务逻辑的困惑
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,从另一个角度来说,也是AOP应用较多的领域之一。但是,使用AOP进行日志分离也有着严重的问题。当前AOP主要分为Spring的无内浸性AOP,以及AspectJ的内侵式AOP。使用AspectJ,需要专门的AspectJ编译器,这个让很多JAVA程序员无法接受。使用Spring的AOP的话,由于Spring的AOP是基于JAVA的动态代理功能上构建的,只能在方法的前后进行AOP插入,限制了其应用的范围,尤其是对于日志信息来说,仅仅在方法调用前后记录日志,肯定是不够的。
因此,当前情况下,如果不使用AspectJ,要把日志代码全部分离出去,不太现实。
如果AOP的方法暂时不可行,那么,换一个角度来说,我们不把日志信息与逻辑代码相分离,那么日志信息应该写在什么地方。以OO的角度来看,数据进行封装,不应从外部直接访问类中数据,那么,处理日志信息的代码就要写在每个类里,这样,造成的后果是每个类都要记录自己的信息,都与日志模块耦合在了一起。这也是我们所不希望看到的。虽然当前的AOP技术不能完全解决日志分离的问题,我们仍然希望,把日志信息的记录集中在一,二个模块中,或者,几个“切面”中。
当然,我们可以使用Observer模式来解决这一问题,让日志记录与应用逻辑相对的解耦,然而,Observer模式太过重型,你总不希望写每个类的时候都要来实现一下Observer模式把。
同时,在此提出新的问题,软件的正常运行,需要监控其稳定性,性能等指标。这就需要我们提供相应的接口来记录这些信息。这些信息与日志信息的情况相同,在整个系统中广泛存在。同样存在着如何提供接口,如何记录的问题。
至此,这个问题还处在迷茫中,准备读几个开源项目的源码,看看大家都是怎么处理这一问题的,希望能有说收获。
相关文章推荐
- DDD:如何处理“唯一性”业务逻辑
- 几十条业务线日志系统如何收集处理?
- 如何利用动态URL提升SEO及处理业务逻辑
- 阿里Goldeneye业务监控平台之架构演进,如何实时处理100T+/天的日志量?
- java如何异步方式处理业务逻辑
- php中,控制器如何调用模型来处理业务逻辑?
- 几十条业务线日志系统如何收集处理?
- 如何进行界面和业务逻辑分开的原型化开发
- 如何处理服务器重启后,日志分析的重新挂载的问题
- exchange IIS 目录下日志无限扩大如何处理
- 如何快速写游戏服务器业务逻辑
- 业务逻辑复杂性处理
- 20.如何从app业务逻辑提炼api接口
- 如何理解【业务逻辑】
- 如何在UWP中统一处理不同设备间的页面回退逻辑
- 关于短信的读取以及新短信到达时如何触发事件去处理自己的逻辑
- rsyslog, logstash如何结合收集处理日志信息
- 使用Servlet处理业务逻辑
- NHibernate 如何处理泛型业务实体类?
- 天天写业务逻辑代码改Bug,程序员该如何实现个人成长?