注意:
以Trace类做示例,但Debug类也通用。
Trace.Listeners默认是一个System.Diagnostics.DefaultTraceListener类型,这个类型的侦听器会在断言时弹出一个对话框,如下代码:
// using System.Diagnostics;
Trace.Assert(false,"hehe");
执行后会出现如下对话框:
hehe
方法一就是清空Trace的默认侦听器,然后加入自己的侦听器,比如TextWriterTraceListener:
后台:
using System.Diagnostics; namespace test_trace{ public class test{ public void main(){ Trace.Listeners.Clear(); //自动清空缓冲(即时写入) Trace.AutoFlush=true; Trace.Listeners.Add(newTextWriterTraceListener("app.log")); Trace.Assert(false,"hehe"); } }
第二种方法就是通过修改应用程序集的配置文件(app.config)
<configuration> <system.diagnostics> <trace autoflush="true"> <listeners> <!--删除默认侦听器--> <clear/> <!--加入侦听器--> <add name="listener1" type="System.Diagnostics.TextWriterTraceListener" initializeData="app.log"/> </listeners> </trace> </system.diagnostics> </configuration>
第三种方法也是在配置文件里,其实<system.diagnostics>元素下有直接对断言的支持,使用<assert>元素。assertuienabled属性代表是否显示断言对话框,而logfilename代表记录文件的位置。
<configuration> <system.diagnostics> <assert assertuienabled="false" logfilename="app.log"/> </system.diagnostics> </configuration>
最后需要注意的是第三种方法输出的记录最详细,而且不需要设置Trace类的属性。第一行的”hehe”是前两种方法的输出。而后面的文字全是第三种方法的输出。
Fail: hehe
---- DEBUG ASSERTION FAILED ----
---- Assert Short Message ----
hehe
---- Assert Long Message ----
at Program.Main() e:\users\mgen\documents\visual studio 2010\Projects\Mgen\Mgen\Program.cs(11)