分享
 
 
 

在Java应用软件中加入logging

王朝java/jsp·作者佚名  2008-05-31
窄屏简体版  字體: |||超大  

作者: BUILDER.COM

任何应用软件都需要一个从外界收集和交换数据的途径,这可以通过界面,数据库或使用文本文件来实现。有了这么多选择,使用普通的文本文件来做数据的采集和调试的方法似乎已经被人忘记,虽然文本文件不能给你提供最新的技术所带来的兴奋感觉,但是他却能有效地对应用软件的数据进行采集和分析。

Log4j数据包

利用Java编程语言中的库可以轻松地向文件写入数据。但在有一个良好的数据包可以使用的情况下,为什么还要进行二次开发呢?Java SDK 1.4版本将内建一个logging API,但在他更加成熟之前,我还是会坚持使用一些更加得到实际证实的东西?例如log4j数据包:它具有健全、可靠、可轻松扩展、应用简易等的特点,你可以从Apache Jakarta project得到log4j。要使用log4j,在应用软件的CLASSPATH中需要具有log4j.jar文件。

根起始类别

log4j是以类别的概念为中心进行组织的,在应用软件运行时,log4j可以在任何时间拥有任意多的类别。根类别时一直存在的,他是类别等级的起始。类别像Java数据包那样使用点式标记来进行命名,这可以很轻易地通过在现有的代码结构中安置特定的logging来控制logging声明是如何被处理的。

类别具有继续的特性,所以一个名叫com.versatilesolutions.example的类别将会从com.versatilesolutions类别继续设置。你可以对一个类别设置优先权来控制logging应用软件的数量。优先权包括调试、信息、警告、错误、严重错误。当你调用logging程序时,可以通过使用不同的方法对不同的优先权进行设置。假如你正在进行大型操作,你可以检查现有优先权是否被激活,这样大型操作只有在声明被记录的情况下才能运行。

Logging的种类和形式

当logging数据包收到一个logging声明时,log4j使用附加器来指定运行什么类型的logging。Log4j的标准附加器包括屏幕,文件,轮转文件和一个答应在中心区域记录数据的采集的远程附加器。附加器在类别中的应用使得应用软件中的不同部分可以有不同的记录目的地。

假如你给类别设置了优先权和附加器,剩下的就是设置一个形式。形式控制着logging声明的实际格式,例如日期,时间,基准时间和线识别等。由于你可以从log4j的资料中找到所有可用格式的摘要,这里我就 不再详述了。

对log4j的配置可以通过XML文件或Java属性文件来完成。我更喜欢Java属性文件技术,这是由于他真正地具有对于XML文件的压倒性优势。列表A包含一个用来配置log4j的属性文件。

属性文件中第一个无注释行指定了根类别具有调试的优先权和三个附加器,分别标注为A1,A2,A3。剩余部分为每一个识别器指定了附加器。在这个属性文件里,附加器分别是控制(屏幕),轮转文件和UDP播放器。

UDP播放器属于一个附加器,我把他加入log4j数据包中使得我可以互动地观察记录声明。每一个附加器都有一个形式对象,在这里面使用了PatternLayout并随之以转换模式。转换模式中的特性指定了输出,%符号用来指定格式特性,在此例中,%-5p代表在优先权中使用五个特性的左对齐(p),接着是日期(%d),线信息(%t),消息(%m),最后是线终止特性(%n)。

在应用软件中使用log4j,你需要用PropertyConfigurator来加载这个属性文件,在起始类中的一行信息会实现这一目的:

….

PropertyConfigurator.configure("path/to/file.properties");

配置被加载之后,应用软件中需要logging功能的类都需要对类别对象的参照。由于类别使用数据包命名方式,我经常使用与类别相同的类名,尽管这不是必须的,而是根据你如何对配置进行安排所决定的。声明一个类的单静态变量可以使logging程序可用:

import org.apache.log4j.Category;

….

private static final Category log = Category.getInstance(MyClass.class.getName());

logging事件

在应用软件中的logging现在可以轻松实现,只要调用与所logging信息的优先权相对应的方法即可。例如,下面是调试信息:

log.debug("Log4j really works!");

假如你要确定调试优先权被激活,你可以在调试调用之前进行查看。要注重的是除非正确地设置了优先权,否则即使你发出了信息也不会被记录。检查当前的优先权是一种避免大型操作先于记录操作现象得简单方法。下面是一个在记录声明之前检查优先权的例子:

if ( log.isDebugEnabled() ) {

log.debug("Another log statement.”);

}

你也可以在记录方法中加入一个例外,例外中包含有记录消息如下面所示:

log.warn("Oops caught an exception.", myException);

假如你的应用软件需要一个强力的logging功能,看一看log4j数据包吧,他提供了很强的适应性,具有可配置的附加器和优先权体系可以使你对产品中的logging进行控制和调整而不会使系统显著扩大。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有