`

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

 

 

分享到:
评论

相关推荐

    commons-logging-1.2源码(commons-logging-1.2-src.zip)

    《Apache Commons Logging 1.2源码解析》 Apache Commons Logging(简称Commons Logging)是Apache软件基金会开发的一个日志接口库,它提供了一个统一的日志API,允许开发者选择底层的日志实现,如Log4j、Java内置...

    commons-logging-1.1.jar

    Apache Commons Logging(以下简称“Commons Logging”)是一个轻量级的日志记录工具包,它为Java应用程序提供了一个接口,可以透明地使用各种日志框架,如Java内置的日志系统、Log4j、JDK14 logging等。这个库的...

    commons-logging-1.1.3.rar

    《Apache Commons Logging 1.1.3 源码解析》 Apache Commons Logging(简称 Commons Logging)是 Apache 软件基金会开发的一个日志抽象层组件,它为 Java 应用程序提供了一种灵活的日志记录机制。在这个 "commons-...

    common-logging1.1.1jar

    《全面解析Apache Commons Logging 1.1.1》 Apache Commons Logging(简称Commons Logging)是Java领域中广泛使用的日志记录工具包,它提供了一个轻量级的日志接口,允许开发者在不修改代码的情况下更换底层的日志...

    apache-commons源码及jar文件

    Commons-Digester 是一个 XML-Java对象的映射工具,用于解析 XML配置文件. Discovery Commons-Discovery 提供工具来定位资源 (包括类) ,通过使用各种模式来映射服务/引用名称和资源名称。. EL Commons-EL 提供在...

    Apusic AS的Web应用中调用commons-logging的流程

    在IT行业中,Apache Commons Logging(简称commons-logging)是一个广泛使用的日志抽象层,它允许开发者选择不同的日志实现框架,如Log4j、Java Util Logging等,而无需修改代码中的日志调用。本篇文章将深入探讨在...

    commons-net-3.3源码包

    在源码中,可以看到Apache Commons Net如何处理各种网络错误,以及如何利用logging框架(如log4j)来记录操作日志,这对调试和监控系统性能非常重要。 9. **设计模式应用**: 学习源码还可以了解到软件设计模式的...

    使用Commons进行文件上传

    1. **初始化Servlet环境**:在Servlet容器(如Tomcat)中,你需要配置一个Servlet来接收文件上传请求。在Servlet的`init()`方法中,可以设置`ServletConfig`以启用文件上传: ```java public void init...

    commons第6章

    在"commons"库中,第6章可能涉及了某一部分核心组件的源码解析。例如,可能是对Apache Commons Lang、IO或Collections等子项目的深度剖析。这些子项目包含了大量用于字符串操作、文件I/O和集合处理的工具类。 ...

    JSON依赖源码及各种资料

    其中,"commons-logging-1.2"是Apache Commons Logging的一个版本,这是一个日志记录API,虽然不是直接与JSON处理相关的库,但在许多Java项目中,包括那些处理JSON的库,它常被用作日志输出的抽象层。 Apache ...

    介绍Jakarta Commons的烹饪书

    1. **IoC(Inversion of Control)依赖注入**:Jakarta Commons包含BeanUtils模块,提供了一种方便的JavaBean操作方式,实现了依赖注入,使得组件间的耦合度降低,提高了代码的可测试性和可维护性。 2. **...

    json需要的jar包整合

    1. `commons-collections-3.2.1-javadoc.jar`:Apache Commons Collections的API文档,提供了一组丰富的集合框架扩展,包括列表、映射、队列等,方便数据操作和转换。 2. `commons-collections-3.2.1-sources.jar`...

    tomcat源码编译所需jar包

    在编译源码时,需要包含commons-logging.jar。 四、Apache JSP和Servlet API Tomcat作为Servlet容器,需要Servlet和JSP API的jar包来处理HTTP请求和生成动态内容。在编译Tomcat时,通常会依赖于servlet-api.jar和...

    <<项目架构那点儿事>>——工具类,你喜欢你就拿去

    1. **Fastjson-1.1.10.jar**:Fastjson是阿里巴巴开源的一个高性能的JSON库,它能快速地将Java对象转换成JSON字符串,也能将JSON数据解析为Java对象。Fastjson支持JSON标准,同时也提供了丰富的API来处理JSON,如`...

    classloader源码

    5. `commons-logging`:这是一个常见的日志库,可能被项目依赖,用于记录程序运行过程中的信息。 6. `lib`:这个目录通常存放项目的外部依赖库,`ClassLoader`可能需要加载这些库中的类。 7. `classes`:编译后的`....

    java解析PDF所需的基础jar包

    `commons-logging-1.1.1.jar`是Apache Commons Logging库的一个较旧版本,它是一个日志抽象层,允许开发者选择不同的日志实现(如Log4j、java.util.logging等)。在PDFBox中,它用于记录执行过程中的信息,帮助调试...

    java网页抓取demo

    1. 使用Apache Commons Logging进行日志记录。 2. 配置和使用HTTP Client库发起HTTP请求。 3. 理解HTTP请求与响应的生命周期。 4. 解析HTML内容,提取所需信息。 5. 如何运行和调试网页抓取程序。 通过学习和实践这...

    Struts1配置

    `commons-logging.jar`是Apache Commons Logging库,它提供了一个统一的日志接口,允许开发者在不改变代码的情况下切换不同的日志实现。在Struts1中,使用Commons Logging进行日志记录,可以方便地调整日志级别和...

    java解析表达式JEXL实现办法

    3. `commons-logging-1.1.1.jar` - 这是Apache Commons Logging的1.1.1版本,它提供了一个抽象的日志接口,允许在运行时选择具体实现,如Log4j或Java内置的日志框架。 要开始使用JEXL,首先需要导入必要的类,如`...

Global site tag (gtag.js) - Google Analytics