commons-logging 结合 log4j, 初始化生命周期 初探

时间:2021-05-26 22:02:04

 

-------commons-logging----------

Log log=LogFactory.getLog(clazz);

    LogFactory这是个抽象日志工厂,更像个工具? 通过线程上下文,找jvm属性是否指定工厂-》配置文件是否有-》meta-inf/service是否有[ 有个默认的 impl.LogFactoryImpl].   它再来discover找LogImpl(具体的日志实现),还是通过jvm属性是否指定-》配置文件是否有;否则default [log4jlogger,..]顺序。假设指定了是impl.log4jlogger。

 

-----------   log4jLogger-(broker) -----------------

         log4jLogger类被加载,并实例化,getLogger()-->实际上org.apache.log4j.Logger.getlogger(xx).

----------log4j---------------

而logger需要委托LogManager.

                先加载类LogManager,静态初始化DomConfigurator,它来找到(  jvm属性,classpath )log4j.xml的uri,和默认的resposity为参数,进行configure。

               configure借助dombuilderFactory.来解析log4jEntity. 并把解析的logger对象结果,存在resposity的hashtable中。

         继续委托,logmanager,getlogger(xx), 本次及以后的getLogger,就直接在loggerResposity中直接获取到了。