看了Modern C#系列課程5--C#中異常處理的筆記,主講 俞暉
主要是跟蹤(tracing),其實個人覺得,就是寫一個寫文件函數,把程序的每一步都寫入文件,然後用DEBUG控制打開或關閉,效果一樣。但是,這個跟蹤好像要複雜一點。
首先,要增加一個配置文件。
在config中設定,打開/關閉tracing。
<configuration>
<appSettings>
<add key=”tracing” value=”true”/>
</appSettings>
</configuration>
可以通過在項目中添加配置文件,然後加上上面的語句。
然後,增加一個Globals.cs文件,讀取配置文件中的配置信息。
using System;
using CFG = System.Configuration.ConfigurationSettings;//名字空間別名
namespace Tracing
{
public class Globals
{
public static readonly bool Trace;//全局變量,打開關閉跟蹤的FLAG
static Globals() // constructor (called automatically upon first use of class)
{
try // to read trace setting
{
//通過讀取配置文件中的KEY,取得相應的VALUE
Trace = System.Convert.ToBoolean( CFG.AppSettings["Tracing"] );
}
catch
{
Trace = false;
}
}
}//class
}//namespace
其次,在程序運行之前要做一些準備工作。在Form1.cs中:
static void Main()
{
//在當前目錄生成AppLog.txt文件
string logfile = System.AppDomain.CurrentDomain.BaseDirectory + "AppLog.txt";
//打開一個IO流
System.IO.TextWriter log = new System.IO.StreamWriter(logfile);
//如果打開了跟蹤
if (Globals.Trace) // then also send trace output to log file・
{
//生成一個跟蹤的監聽器
System.Diagnostics.TextWriterTraceListener logger;
//把跟蹤的監聽器綁定到IO流上
logger = new System.Diagnostics.TextWriterTraceListener(log);
//把監聽器加入對象
System.Diagnostics.Trace.Listeners.Add(logger);
//跟蹤對象寫log,觸發IO流寫文件
System.Diagnostics.Trace.WriteLine("App starting: " + DateTime.Now);
}
//主程序運行
Application.Run(new Form1());
}
最後,在程序中需要寫文件的地方加上跟蹤對象的處理。
using System;
using T = System.Diagnostics.Trace; //名字空間別名
T.WriteLineIf(Globals.Trace, "DataAccess.Open():");
T.Indent(); //縮進
T.WriteLineIf(Globals.Trace, "Connection string=...");
T.Unindent();//取消縮進
T.Flush();//寫完清空IO流
T.WriteLineIf(Globals.Trace, 參數);//參數可以是字符串或整形