读log4j源码一点体会(转移)
来源:互联网 发布:linux make命令找不到 编辑:程序博客网 时间:2024/06/09 17:20
读log4j源码一点体会
从上图中我们可以很清楚的了解到这四个抽象体之间的关系,Logger是我们使用log4j的接口, 比如我们常在程序中这样定义Logger ,Logger myLogger = Logger.getLogger(MyClass.class); 最有意思的是 LoggingEvent,它就如整个系统的一根主线,其它三个抽象体的工作运行都是围绕着这根主线发生着互动,我们平时如调用 myLogger.debug("..."); 就会先由 Logger 产生一个LoggingEvent将其转交给相应的 Appender,Appender 在将信息输出前会调用相应的 Layout 对信息进行格式化,最将信息输出到最后的目的地。
这里我要提到的是一个很特别的地方,Logger在log4j内部存在一个父子的层次关系,也就是说每个Logger对象中有一个parent属性指向其父Logger,顶级rootLogger的parent就为null,log4j这样定义Logger的层次关系: 系统初始化时会产生一个 root Logger,所以以后在程序中调用 Logger.getLogger(..)方法得到的Logger都是间接或直接成为root Logger 的子Logger,比如说,在 com.mypackage.MyClass 中,调用 Logger myLogger = Logger.getLogger(MyClass.class) 产生一个Logger对象,如果 存在一个 com.mypackage 名字的Logger,那么这个Logger 将成为 myLogger 的父Logger,如果不存在,log4j会找 名字为 com的,不果不存在,root Logger 将成为其父Logger,当产生日志事件, 简单的讲就是在程序中调用 myLogger.debug("...") 或其它级别的方法时,log4j会向上一级级的访问 myLogger及myLogger的父Logger, log4j为什么要这样设计,这样做不是很麻烦吗,这是初看log4j源码很容易迷惑的地方,同时也是log4j一个很有特色的地方, 首先大家一定知道Java的一个编程思想,就是最大限度的代码重用,这里我们再上升一个层次看这个问题,它这样设计可以做到资源重用,因为我们可以看到Appender这个系统抽象体实际代表着一种日志输出用流资源, 只有通过它我们才可以把我们自己的日志信息写到我们想要的地方,如果每生一个Logger对象都要跟其配一些Appender,这不就很浪费,而且会影响性能,所以这种设计就可以有效的重用这些Appender资源,同时log4j也允许你通过配置文件配置自己相应Logger的Appender。
- 读log4j源码一点体会(转移)
- 读log4j源码一点体会(转移)
- 读log4j源码一点体会
- 一点体会。
- 一点体会
- 一点体会
- 一点体会
- 一点体会
- 一点体会
- 一点体会
- 一点体会
- 一点体会
- 关于Ubuntu下Android源码下载编译的一点体会
- log4j 使用体会
- 关于Hibernate一点体会
- 关于Hibernate一点体会
- 在工作中的一点体会
- 一点体会,些许感想
- Jetty 源码分析(转移)
- rico实现ajax应用的例子(1)
- 欺骗的艺术(第四章 建立信任五)
- 编写简单的中文分词程序
- 中国1-0胜新加坡
- 读log4j源码一点体会(转移)
- 软件测试从零开始
- MySQL vs PostgreSQL
- I am Back!
- 缺陷管理信息系统EoodaBMS V.1.2.0806
- 在VS2005中,将DataGridView中的数据导入到Excel文件中
- 第二阶段工作胜利完成
- 开始了新的生活---用友ERP销售
- 自动化测试的7个步骤(转载)