快速业务通道

多线程、多平台环境中的跟踪-使用log4j和UNIX命令来挖掘跟踪数据 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
tarting (12:01:02) Starting (12:01:02) Starting (12:01:02) initializing variables (12:01:02) initializing variables (12:01:03) making call to db (12:01:03) making call to db (12:01:03) initializing variables (12:01:03) initializing variables (12:01:03) making call to db (12:01:03) making call to db (12:01:03) Starting (12:01:04) got value ''A'' (12:01:04) initializing variables (12:01:04) got value ''B'' (12:01:04) got value ''X'' (12:01:04) got value ''3'' (12:01:04) making call to db (12:01:05) setting new value to db (12:01:05) setting new value to db (12:01:05) got value ''A'' (12:01:05) setting new value to db (12:01:05) setting new value to db (12:01:05) done (12:01:05) setting new value to db (12:01:05) done (12:01:05) done (12:01:05) FAILED!!! (12:01:05) done

那么那五个线程中哪个线程出了问题呢?这是一个简单的例子,更好的跟踪 语 句将帮助确定问题根源,但是您可以看出,当只有时间戳来指导您时,仅只是五 个线程的输出就是多么令人混淆。所有线程的输出乱七八糟地混合在一起,而定 时问题意味着输出语句不是以相对的线程顺序出现的。

那么您如何自己做出改进呢?关键就是使用 唯一标识符。您需要使用与其输 出相关联的唯一 ID 来标记每个线程。这样将允许基于该唯一 ID 来过滤最终的 跟踪信息。log4j 默认情况下输出类似如下的消息:

153 [Thread-1] INFO demo.logger.sample.SampleCode - Program Running

注意它已经包括了一个线程 ID。但是正如您从中可以看出的,输出的布局在 默认情况下不是很理想,它丢失了时间戳,而我认为时间戳正是任何日志记录系 统的至关重要的元素。

多线程、多平台环境中的跟踪-使用log4j和UNIX命令来挖掘跟踪数据(3)

时间:2011-09-07 ibm

幸运的是,log4j 具有一个非常好的特性,它将帮您纠正这个问题:用户可 以 通过配置一个文件来确定跟踪输出的新布局。我将对本文例子使用的文件如清单 3 所示。

清单 3. 示例 log4j 配置文件

log4j.rootLogger=debug, stdout, R log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.a p pender.stdout.layout=org.apache.log4j.PatternLayout # Pattern to output the caller''s file name and line number. log4j.appender.stdout.layout.ConversionPattern=%d %5p [%t] (%F:%L) - %m% n log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.ap p ender.R.File=example.log log4j.appender.R.MaxFileSize=1000KB # Keep one backup file log4j.appender.R.MaxBackupIndex=1 log4j.appender.R.layout=o r g.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPatt e rn=%d %5p [%t] (%F:%L) - %m%n

其中的有些(或许是全部)初看起来可能相当含糊。让我们逐行地研究它以 理 解其语法。第一行定义了连接到根日志记录器的日志记录器。之后配置的两项是 stdout 和 R 。您可以看到 stdout 与一个 ConsoleAppender 关联,然后被赋 予 一个 PatternLayout 。然后是使用两个变量来定义模式;您将在后面看到那些 变 量如何与输出的各部分相关联。基本上,随后是对 R 完成相同的设置--只不过 它 是一个文件目的地(file appender)。它接受一个文件名称、一个最大尺寸以 及 一个备份索引。备份索引告诉它要保留日志多长时间,因此在到达最大尺寸时, 该日志将被重命名,一个全新的日志文件又开始了。正如您可以看到的, PatternLayout 因而是相同的。

这个配置存储在一个名为 log4j.properties的文件中,我只是将它作为一个 参数传

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号