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

.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。


注意:要调用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>
<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