为程序添加自己的跟踪侦听器


      跟踪可以监视应用程序在执行时的情况,获取需要的信息。通过跟踪,可以收集到程序在执行过程中的一些有用的信息。在.Net中可以通过Trace类方便的实现简单的跟踪机制。在默认情况下是使用DefaultTraceListener侦听器对Trace发送的消息进行侦听和存储的。除此之外,.Net Framework还提供了一些特殊化功能的侦听器,同默认侦听器一样,它们都派生自TraceListener类。

  • TextWriterTraceListener将收集的消息输出到Stream中,我们可以方便的将其保存成文件。
  • EventLogTraceListener输出到事件日志
  • ConsoleTraceListener可以将跟踪信息发送到标准输出流
  • XmlWriterTraceListener当然就是将信息以xml的形式输出到Stream中,同样方便保存为xml片断文件

      侦听器可以通过在代码中调用Trace.Listeners.Add和Remove方法进行添加和移除操作。另外也可以通过在应用程序配置文件中设置<system.diagnostics>元素来对消息跟踪、侦听器以及跟踪开关级别进行设置。其中的<trace>子元素可以对消息跟踪进行相关的设置。

None.gif < configuration >
None.gif   
< system .diagnostics >
None.gif      
< trace >
None.gif         
< listeners >
None.gif            
< add  name ="myListener"  type ="System.Diagnostics. XmlWriterTraceListener, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"  initializeData ="c:\myListener.xml"   />
None.gif            
< remove  name ="Default" />
None.gif         
</ listeners >
None.gif      
</ trace >
None.gif   
</ system.diagnostics >
None.gif
</ configuration >
None.gif

      上例中我们添加了一个名为myListener的XmlWriterTraceListener类型的侦听器,并移除了默认的侦听器。

      如果对于跟踪侦听还有其他特殊的要求,也可以实现自己的侦听器并用相似的方法添加它们。下例是一个派生自TextWriterTraceListener的自定义侦听器类。它完成的功能也很简单。通过重写WriteLine方法,该侦听器可以简单的格式化输出形式并添加时间。较常用的还有Write和WriteIf方法。

None.gif      public   class  MyTraceListener : System.Diagnostics.TextWriterTraceListener
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif {
InBlock.gif        
public MyTraceListener(string filename)
InBlock.gif            : 
base(filename)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public override void WriteLine(string str)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
base.WriteLine(string.Format("my trace name='{0}' time='{1}' ", str, DateTime.Now.ToString()));
ExpandedSubBlockEnd.gif        }

ExpandedBlockEnd.gif    }

None.gif

P.S.对于XmlWriterTraceListener类型的侦听器来说,它会将消息输出为特定格式的xml片断。为了生成标准xml文件,还需要对其进行进一步的操作。最直接的做法就是将跟踪结果先储存在临时的文件中,在跟踪结束后将生成的xml片断添加到正式的trace文件里。但是某些情况下,trace文件会随着时间的增长和操作的增多变得非常巨大,由于xml的结构要求,我们不能像一般文档那样对其在末尾进行简单的追加操作。频繁的读取和导航可能会消耗较多的资源。对于这种情况我们可以使用引用外部实体来合并xml文档。XInclude?貌似支持它的太少了点...

再P.S.使用.Net使用XmlDocument处理xml文件时是禁用DTD的。如果要处理上面说的这种xml文档需要将XmlReaderSettings的ProhibitDtd属性设为false并在Load文档时候传入。
 

转载于:https://www.cnblogs.com/aiyagaze/archive/2007/06/01/767880.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值