在.net 1.0中使用Trace和Debug静态类用于跟踪诊断。
Trace在Debug和Release下均可工作,而Debug只在Debug状态下好用。
PrintRefresh, TraceError, TraceWarning...
Trace.TraceXXX会输入类似这样的文本:
ConsoleLab.vshost.exe Warning: 0 : Messages.....
那个0是EventId, 永远是0.
TextWriterTraceListener tr1 = new TextWriterTraceListener(Console.Out);
Debug.Listeners.Add(tr1);
TextWriterTraceListener tr2 = new TextWriterTraceListener(File.CreateText("output.txt"));
Debug.Listeners.Add(tr2);
Trace.TraceWarning("Trace Warning");
Trace.TraceWarning("Trace Warning again");
Trace.WriteLine("hello trace!");
Console.Read(); Trace和Debug是共享Listener的,从上面的代码可以看出来:Listener是加在Debug的Listeners属性上的,但是Trace也可用。
TraceSwitch ts = new TraceSwitch("mySwitch", "in the Config file");
ts.Level = TraceLevel.Verbose;
Trace.WriteLineIf(ts.TraceError, "Error!!!");
Trace.WriteLineIf(ts.TraceWarning, "Warning!!!");
Trace.WriteLineIf(ts.TraceInfo, "Info!!!");
Trace.WriteLineIf(ts.TraceVerbose, "Verbose!!!"); TraceSwitch构造函数有2个重载(string name, string desc) (string name, string desc, string defaultValue)
它会从配置文件中读取name对应的Level值,在无法从配置文件中找到level值时,第一个重载将level设置为Off,应用第二个重载可以指定默认值,这个默认值参数可以是1, 也可以是Error(不区分大小写)。
TraceLevel枚举类别(Off(0), Error(1), Warning(2), Info(3), Verbose(4))
TraceSwitch和Trace.TraceError, Trace.TraceWarning是没有关系的,Trace.TraceXXX总是会写入listener的
<configuration>
<system.diagnostics>
<switches>
<add name="mySwitch" value="1" /> 任何大于 4 的数字都会被当作 Verbose,任何小于零的数字都会被当作 Off。
</switches>
</system.diagnostics>
</configuration>
TraceOptions Listener.TraceOutputOptions
Callstack, DateTime, LogicalOperationStack, None, ProcessId, ThreadId, Timestamp
自定义TraceListener:http://www.cnblogs.com/chenxizhang/archive/2009/07/28/1532885.html
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add name="default" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="ProcessId, DateTime" initializeData="Log.txt" />
<add name="db" type="ClassFullName,Assembly" initializeData="server=(local);database=demo.....;">
<trace autoflush="true">
<listeners>
<add name="default" type="System.Diagnostics.TextWriterTraceListener" traceOutputOptions="ProcessId, DateTime" initializeData="Log.txt" />
<add name="db" type="ClassFullName,Assembly" initializeData="server=(local);database=demo.....;">
<filter type="System.Diagnostics.EventTypeFilter" initializeData="Warning" />
</add>
</listeners>
</trace>
</system.diagnostics>
</listeners>
</trace>
</system.diagnostics>
貌似.net会自动识别带一个字符串参数的构造函数,并自动在构造时传入配置文件中的initializeData值
System.Object
System.Diagnostics.TraceFilter
System.Diagnostics.EventTypeFilter
System.Diagnostics.SourceFilter (TraceSoure名称)
System.Diagnostics.TraceFilter
System.Diagnostics.EventTypeFilter
System.Diagnostics.SourceFilter (TraceSoure名称)
ShouldTrace 方法