分享
 
 
 

管中窥豹、我看Log4j

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有