• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

管中窥豹、我看Log4j

发布: 2007-7-04 13:34 | 作者: admin | 来源:  网友评论 | 查看: 9次 | 进入软件测试论坛讨论

领测软件测试网

        Log4j的名气和作用我就不提了,这方面的介绍比比皆是,我这里主要是就我个人的理解谈谈log4j的核心框架,不涉及具体的使用,主要目的希望能够协助大家加强对log4j的认识。由于个人水平有限,理解不当之处,望各位批评指正,不胜惶恐。

        一、 三类组件:Loggers、Appenders、Layouts 正是由这三类组件基本组件组成了log4j的基本框架。其中Logger提供了日志管理的具体功能(主要是输出);Appender提供了日志管理的输出目的地,即日志是输出到文件、还是输出到控制台、或者两者都输出、或者输出到其他地方; Layout提供了日志输出的具体格式和附加信息,简单理解的话可以说就是输出的格式如何排版的问题(类似word文档)。

        二、 Loggers之间的关系。 每一个Logger(root Logger例外)都是由唯一的名称标识的,只能Logger.getLogger(用Logger的名称做参数)(class static method)生成实例,相互之间通过名称确定关系。与Java类库的继承体系类似,所有Logger都有相同的根节点,即root Logger,他只能通过Logger.getRootLogger(class static method)访问,而且他永远存在。 Loggers之间的关系如下图(当作类的继承体系看比较合适): [好像不能粘贴图片,若那位有兴趣的话找liudongbaollz◎21cn.com(msn)联系获取word格式的文档] Root logger 是所有logger的祖先,如果一个logger的名称(如“com”)是另一个logger名称(“com.sun.java”)的前缀(以“.”作为分隔符),则“com”是“com.sun.java”的祖先,“com.sun.java”是com的子孙,可以理解为“com.sun.java”继承(间接继承)于“com”,一切正如大家所熟悉的java类库的继承体系。如果一个logger于另一个拥有祖孙关系的logger之间没有其他logger的话,如“com”和“com.ibm”,则又拥有父子关系。

      三、 Logger的等级(level)属性与继承体系的关系。 Loggers 可以被赋予等级(level).等级集合包括:DEBUG, INFO, WARN, ERROR 和 FATAL,都定义在org.apache.log4j.Level类中。如果一个logger没有赋予任何等级(level),他将从最近的祖先logger获得相同的等级(level)。更正式的说,Logger(C)所能继承的等级等于,自C起沿着整个继承体系由下往上直到root logger找到的第一个不为空的等级(level)。 为了确保所有的logger都拥有等级, root logger总是会赋予一个等级(level).

     四、 Appenders与继承体系的关系。 Logger通过方法addAppender为自己附加一个appdender。任何一个logger的已启用的logging请求都会将请求转发给继承体系种更高层次的logger中的所有appenders。换句话说,appenders在整个继承体系中也有额外的继承特性。比如:如果一个console appender 被附加给root logger ,那么所有启用的logging请求至少会在cosole中输出。 如果一个额外的file Appender被附加给logger(C), 那么所有来自C和C的子类的logging请求都会输出到file和console。通过设定 additivity flag为false.(setAdditivity)可以关闭这个特性以便减少appender的堆积。 控制此项特性(appender additivity)的规则描述如下: Logger C 的 log 表达式输出将传递到C和他的ancestors(祖先)的所有appenders,这就是“appender additivity”的含义。然而,如果C的一个ancestors(祖先),称为P,已经将additivity 标志位设定为false,则C的log表达式输出将传递到C和向上所有的祖先直到P(包括P) 中的所有的appenders,但是不包括P的任何祖先的appenders。

      五、 Logger中的Logging请求与等级(level)的关系。 Logging请求通过调用Logger中的输出方法来完成,主要输出方法有debug, info, warn, error, fatal 和 log。每个Logging请求也拥有相应的等级,其中调用log产生的Logging请求等级在参数中定义,由其他方法产生的Logging请求的等级由方法名字决定,如debug拥有DEBUG等级。 一个logging请求在其等级高于或等于他的logger等级时被视为启用的,否则被视为禁止的。即一个等级为q(无论该等级是自己设定还是通过继承获得的,都一视同仁)的logger中的一个等级为p的logging请求只有在p大于等于q的时候才会启用。这条规则是log4j的核心部分。他假定这些等级是有序的,对于标准等级,DEBUG < INFO < WARN < ERROR < FATAL。

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网