commons-logging 结合 log4j, 初始化生命周期 初探
-------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中直接获取到了。
commons-logging 结合 log4j, 初始化生命周期 初探的更多相关文章
- Vue 虚拟Dom 及 部分生命周期初探
踏入前端,步入玄学 17年底至18年初附带做了vue的一些框架搭建,中途断断续续用了部分vue,时隔几个月后的工作又拾起vue,对于一些原理性的知识淡忘了,正值这段时间使用中遇到了一些坑,又拨了部分代 ...
- Java 对象初始化生命周期
class Man { String name; int age = 20; public static int sex = 1; Man(String name, int age) { //supe ...
- Java初始化生命周期
package com.init; abstract class Glyph { void draw() { System.out.println("Glyph.draw()"); ...
- spring boot 生命周期初探
1.MytestApplication package com.gomepay; import org.springframework.boot.Banner; import org.springfr ...
- 一起学习vue源码 - Vue2.x的生命周期(初始化阶段)
作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...
- 你还不知道Vue的生命周期吗?带你从Vue源码了解Vue2.x的生命周期(初始化阶段)
作者:小土豆biubiubiu 博客园:https://www.cnblogs.com/HouJiao/ 掘金:https://juejin.im/user/58c61b4361ff4b005d9e8 ...
- Android系列之Fragment(二)----Fragment的生命周期和返回栈
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...
- 浅谈Android中Activity的生命周期
引言 我想对于Android开发人员来说,Activity是再熟悉不过了,今天我们就来探讨下Activity的生命周期.熟悉的掌握Activity对于开发健壮的Android应用程序来说至关重要.下面 ...
- Unity(二)生命周期LifetimeManager
描述:Unity的生命周期是注册的类型对象的生命周期,而Unity默认情况下会自动帮我们维护好这些对象的生命周期,我们也可以显示配置对象的生命周期,Unity将按照配置自动管理. //创建一个Unit ...
随机推荐
- java之 Timer 类的使用以及深入理解
最近一直在看线程知识,然后看到Timer定时器使用了线程实现的定时功能,于是了解了解: 本文 从Time类的使用和源码分析两个方面讲解: 1---Timer类使用 2---源码分析 1.Time类使用 ...
- 关于Java解压文件的一些坑及经验分享(MALFORMED异常)
文章也已经同步到我的csdn博客: http://blog.csdn.net/u012881584/article/details/72615481 关于Java解压文件的一些坑及经验分享 就在本周, ...
- Debian系统简要说明
Debian这个是我最喜欢也是比较熟悉的一个系统了,BD下做个简要说明 一,APT以及dpkg常见用法如下:功能具体语句 软件源设置 /etc/apt/sources.list 更新软件源数据 ...
- 移动端页面 iPhone + Safari 页面调试 之 正确查看网络请求的姿势
如题 本文主要将 Safari + iPhone 前端开发调试 之 正确查看网络请求的 姿势 惯例 说下问题场景: 早知道safari(Mac) + iPhone 调试的方便 能解决很多日常调试问题 ...
- Swift 入门之简单语法(三)
集合 数组 数组使用 [] 定义,这一点与 OC 相同 //: [Int] let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 遍历 for num in nu ...
- ECMAScript 6.0 简介
ECMAScript 6.0 在es6中有 许多语法.还有lambda的使用.以及 class 的使用 还有一些新的对象来解决一些事情 可以提高开发效率 但更重要的是 颠覆 javascript 在你 ...
- 两种进入容器的方法 - 每天5分钟玩转 Docker 容器技术(23)
我们经常需要进到容器里去做一些工作,比如查看日志.调试.启动其他进程等.有两种方法进入容器:attach 和 exec. docker attach 通过 docker attach 可以 attac ...
- makefile介绍1.0
1.gcc参数 -o指定生成文件名 -c只编译不链接 2.makefile标准格式 CC=gcc #编译器变量,#代表注释 SRCS=main.cpp\#源文件变量 a.cpp\ b.cpp\ c.c ...
- 一天搞定CSS:表单(form)--20
1.表单标签 2.input标签属性与取值 代码演示 <!DOCTYPE html> <html> <head> <meta charset="UT ...
- CTE递归 MAXRECURSION 遇到的问题
在使用Sql Server的时候,当需要递归的时候很多时候就会想到使用CTE.但是当递归层数比较多,超过了100层,或者是一个递归死循环的时候.执行就会爆递归次数已到,最多100的错误. 当面对第一种 ...