using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Diagnostics ; using System.IO ; namespace 跟踪 { class Program { static void Main(string[] args) { //跟踪体系架构4个主要部分 // 1 源是跟踪信息的源头,使用源可以发送跟踪消息 // 2 开头定义了要记录的信息级别,例如,可以只请求错误信息或者详细的信息。 // 3 跟踪监听器定义了写入跟踪消息的位置 // 4 监听器可以关联过滤器,过滤器定义了监听器写和哪些跟宗信息,这样,就可以给同一源头使用不同的监听器 // 写入不同级别的信息 // TraceSource类使用了一个开头来定义要记录的信息 // 它有一个相关的TracleListenerCollection来指定跟踪消息的写入位置,这个集合由TraceListener对象组成 // 每个监听器都连接了一个TraceFilter //构造传和程序名 TraceSource source1 = new TraceSource("Wrox.ProCSharp.Tracing"); source1.TraceInformation("--------------------------------------------------这是我要写入的信息"); source1.TraceEvent(TraceEventType.Error, 3, "错误 信息"); source1.TraceData(TraceEventType.Information, 2, new int[] { 1, 2, 3 }); source1.Close(); } } } <?xml version="1.0" encoding="utf-8" ?> <configuration> <system.diagnostics> <sources> <source name="Wrox.ProCSharp.Tracing" switchName="MySourceSwitch" switchType="System.Diagnostics.SourceSwitch"> <listeners> <add name="xmlListener" /> <add name="delimitedListener" /> </listeners> </source> </sources> <sharedListeners> <add name="xmlListener" type="System.Diagnostics.XmlWriterTraceListener" traceOutputOptions="LogicalOperationStack" initializeData="logs/mytrace.xml"> <!--表示只接收指定源的信息--> <filter type="System.Diagnostics.SourceFilter" initializeData="Wrox.ProCSharp.Tracing"/> </add> <!--traceOutputOptions属性指定入哪些额外信息 initializeData指明写入目标--> <!-- None 不写入任何元素。 LogicalOperationStack 写入逻辑操作堆栈,该堆栈由 CorrelationManager..::.LogicalOperationStack 属性的返回值表示。 DateTime 写入日期和时间。 Timestamp 写入时间戳,该时间戳由 GetTimestamp 方法的返回值表示。 ProcessId 写入进程标识,该标识由 Process..::.Id 属性的返回值表示。 ThreadId 写入线程标识,该标识由当前线程的 Thread..::.ManagedThreadId 属性的返回值表示。 Callstack 写入调用堆栈,该堆栈由 Environment..::.StackTrace 属性的返回值表示。 --> <add name="delimitedListener" delimiter=":" type="System.Diagnostics.DelimitedListTraceListener" traceOutputOptions="DateTime, ProcessId, LogicalOperationStack,ThreadId" initializeData="logs/mytrace.txt"> <!--表示只接收指级别的信息--> <filter type="System.Diagnostics.EventTypeFilter" initializeData="Warning"/> </add> </sharedListeners> <trace autoflush="true" /> <assert assertuienabled="false"/> <switches> <!-- Off 不允许任何事件通过。 Critical 只允许 Critical 事件通过。 Error 允许 Critical 和 Error 事件通过。 Warning 允许 Critical、Error 和 Warning 事件通过。 Information 允许 Critical、Error、Warning 和 Information 事件通过。 Verbose 允许 Critical、Error、Warning、Information 和 Verbose 事件通过。 ActivityTracing 允许 Stop、Start、Suspend、Transfer 和 Resume 事件通过。 All 允许所有事件通过。 --> <add name="Wrox.ProCSharp.Tracing" value="Verbose"/> <add name="MySourceSwitch" value="Verbose"/> </switches> </system.diagnostics> </configuration>