使用Trace实现程序日志

      在程序开发过程中,有时需要对程序运行状况做一些日志记录,以便以后查询,维护之用。
有时我们可以使用开源日志组件,如log4net,nlog,EntLib Log等,但有时为简便,
.netFramework中Trace,Debug就可以用来记录日志。并且也比较灵活。
位于System.Diagnostice名称空间下。注意,只有当程序集用TRACE和DEBUG符号常量编译是时,
这两个类才能正常工作。看代码:

Code
以上是一些简单应用,还可以使用TraceSource,TraceListener,

.net Framework中提供以下的TraceListener:
DefautTraceListener 默认的,数据流会重定向到Visual Studio的输出窗口

TextWriterTraceListener 以文件流或文件方式追加写到文件。

EventLogTraceListener 写Windows event log.

EventProviderTraceListener 写和追踪Windows (ETW) subsystem in Windows Vista.

WebPageTraceListener 写到一个ASP.NET web页面.

TextWriterTraceListener 子类又有
  ConsoleTraceListener   
  DelimitedListTraceListener
  XmlWriterTraceListener  
  EventSchemaTraceListener 将端对端事件的跟踪或调试输出定向到 XML 编码的符合架构的日志文件

注: EventSchemaTraceListener 是.net Framework 3.5 新增的。

本文主要演示TextWriterTraceListener,TraceOutputOptions可以记录当前时间,调用堆栈,进程信息等,
其它请参考MSDN。

Code
同时增加,多个
Code

注意:要调用Flush()方法后,才会把缓冲区内容写出去。cache只有4k,在Debug和Trace下使用任何文件流的listener,一个好的
策略是设置AutoFlush属性为True。否则,如果出一个未处理的异常或严重错误,最少4k缓存诊断信息可能会丢失。

使用配制文件,相关的选择项可在配制文件配制,推荐这种方法,比较灵活。
<configuration>
  
<system.diagnostics>
    
<trace autoflush="false" indentsize="4">
      
<listeners>
        
<add name="myListener"
          type
="System.Diagnostics.TextWriterTraceListener"
          initializeData
="TextWriterOutput.log" />
        
<remove name="Default" />
      
</listeners>
    
</trace>
  
</system.diagnostics>
</configuration>

 后记,我们还可以根据需要继承TextWriterTraceListener,定义我们自己的TraceListener.

http://wintersun.cnblogs.com
原文地址:https://www.cnblogs.com/wintersun/p/1302760.html