Commons Logging 源码解析一
? 最近一段日子可真是够忙的,项目上线终于开始有回报了!一直要维护项目的一些不合理问题以及客户的新需求,越发的觉得日志是如此的重要。而且又有在看Commons的其它开源项目的源码,所以决定今天开始研究一下Commons Logging。以前一直没整理明白Logging与Log4j的区别,看了一些关于Commons Logging的官网说明以及一些同行们的总结,这才有所领悟。
? 先说点理论些的东西,就说说这使用日志的重要性吧:
? 不知道各位有没有听过这样一句话:好程序不是写出来的,而是靠调试出来的!这句话的对错那也是仁者见仁、智者见智,不过这足以证明调试程序的重要性,而调试信息从何而来?!基本上诸如抛出异常、捕获异常或者还在用System.out.println打印?!程序调试完了,为了避免诸如System.out.println这类的垃圾代码,你除了删除再也没有别的办法!如果你不怕把大把的时间浪费在做这类无趣的事情上,你大可以不必使用日志框架。不过,等读完了这篇博文再决定要不要换个日志方式来调试程序吧!
? 再来说说Commons Logging与其它日志组件的关系吧:
? 从J2SE1.4开始,JDK就已经提供了Java日志 API。此外其它的日志组件还有我所知道的Log4j,LogKit等等。看我举的这些Logging 组件上为何不提Commons Logging API呢?!这是有原因的,Commons Logging到底扮演着怎么样的一个角色呢?!由来是这样的,现在有这么多的日志组件,多就意味着选择多,选择多就意味着我们要学的就多,学的多就意味着我们要了解不到组件框架的API就多!我到底要选择哪一种,各个组件之间又相互独立,如何做到各个日志的统一简化我们的开发难度,用不到的日志组件,那项目的移植性就麻烦了,Commons Logging就是Apache提供为兼顾各个不同Logging组件简化API差异而建立的一个抽象层组件。你只需要牺牲一点点的配置时间,从而达到同一项目使用不同日志组件的目的,真的没有比这个更好的了,可移植性强了,耶!
? Commons Logging组件的办法是将记录日志的功能封装为一组标准的API,使其底层实现可以任意修改和变换(就是那些org.apache.commons.logging.impl.*Logger)。开发者利用这个API来执行记录日志信息的命令,由API来决定把这些命令传递给适当的底层实现。因此,对于开发者来说,Logging组件对于任何具体的底层实现都是平等的。
? Commons Logging如何做到对各个日志组件起到一个中间桥梁作用的呢,这就需要我们去解读他的源码了,不过需要说明的是,代码相当的少了!在读代码之前呢,我们需要对其有一个感性的认识,具体的Commons Logging使用方式大家可以通过如下链接去进行感性认识:Commons Logging的使用方法,我就不再重复了(大家可不要偷懒噢,一定要读完它,源码见附件,呵呵呵~)
?? 最后列出所有Commons Logging源代码结构:
?? org.apache.commons.logging
???????? |__Log:一个抽象日志API的简单接口
? ? ? ? ? ? ? ? ?? |__org.apache.commons.logging.impl
??????????????????????????? |__AvalonLogger:包装avalon framework日志API的接口实现
??????????????????????????? |__Jdk13LumberjackLogger:JDK3日志实现
??????????????????????????? |__Jdk14Logger:包装JDK4日志API的接口实现类
??????????????????????????? |__Log4JLogger:Log4j日志API包装类
??????????????????????????? |__LogKitLogger:Avalon LogKit日志API包装实现类
??????????????????????????? |__NoOpLog:无日志信息输出实现类(Commons logging自带实现)
??????????????????????????? |__SimpleLog:commons logging自带日志实现类
???????? |__LogFactory:创建Log实现的工厂类
????????????????? |__org.apache.commons.logging.impl
??????????????????????????? |__LogFactoryImpl
???????? |__LogConfigurationException
? ? ? ?? |__LogSource
?? org.apache.commons.logging.impl?
? ? ? ? ? |__ServletContextCleaner
? ? ? ? ? |__WeakHashtable
?
?