现在的位置: 首页 > 综合 > 正文

Trace and Debug in .net

2012年02月29日 ⁄ 综合 ⁄ 共 2371字 ⁄ 字号 评论关闭
在.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

 

<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.....;">
                    <filter type="System.Diagnostics.EventTypeFilter" initializeData="Warning" />
                </add>
            </listeners>
        </trace>
</system.diagnostics>
貌似.net会自动识别带一个字符串参数的构造函数,并自动在构造时传入配置文件中的initializeData值
 
 
System.Object 
  System.Diagnostics.TraceFilter
     System.Diagnostics.EventTypeFilter 
     System.Diagnostics.SourceFilter (TraceSoure名称)
 
ShouldTrace 方法

抱歉!评论已关闭.