對於一個完整的程序系統,一個日志記錄是必不可少的。可以用它來記錄程序在運行過程中的運行狀態和報錯信息。比如,那些不想通過彈框提示的錯誤,程序執行過程中捕獲的異常等。
首先,在你的解決方案中,適當的目錄中新建一個類,比如 LogManager:
編寫如下代碼:
1 /// <summary>
2 /// 日志管理
3 /// </summary>
4 public class LogManager
5 {
6 private string _logDir; // 日志文件存放目錄
7
8 private static LogManager m_LogInstance; // 靜態單例對象
9 // 靜態構造函數
10 static LogManager()
11 {
12 m_LogInstance = new LogManager();
13 }
14 // 私有構造函數(必備函數,不允許外部對該類進行實例化)
15 private LogManager()
16 {
17 _logDir = Environment.CurrentDirectory + "\\Log";
18 this.DelOldFile();
19 }
20 /// <summary>
21 /// 屬性獲取單例對象
22 /// </summary>
23 public static LogManager LogInstance
24 {
25 get { return m_LogInstance; }
26 }
27
28 /// <summary>
29 /// 寫入一條日志記錄
30 /// </summary>
31 /// <param name="pLog">日志記錄內容</param>
32 public void WriteLog(string pLog)
33 {
34 lock (this._logDir) //排它鎖:防止主程序中出現多線程同時訪問同一個文件出錯
35 {
36 // 根據時間創建一個日志文件
37 var vDT = DateTime.Now;
38 string vLogFile = string.Format("{0}\\Log{1}{2}{3}.log",_logDir,vDT.Year,vDT.Month,vDT.Day);
39 // 創建文件流,用於寫入
40 using (FileStream fs = new FileStream(vLogFile, FileMode.Append))
41 {
42 StreamWriter sw = new StreamWriter(fs);
43 sw.WriteLine("{0} >> {1}", vDT.ToString("yyyy-MM-dd HH:mm:ss"), pLog);
44 sw.Flush();
45 sw.Close();
46 fs.Close();
47 }
48 }
49 }
50
51 // 刪除過期文件
52 private void DelOldFile()
53 {
54 // 遍歷指定文件夾下所有子文件,將一定期限前的日志文件刪除。
55 if (!Directory.Exists(this._logDir))
56 {
57 // 如果文件夾目錄不存在
58 Directory.CreateDirectory(this._logDir);
59 return;
60 }
61
62 var vFiles = (new DirectoryInfo(this._logDir)).GetFiles();
63 for (int i = vFiles.Length - 1; i >= 0; i--)
64 {
65 // 指定條件,然後刪除
66 if (vFiles[i].Name.Contains("Log"))
67 {
68 if ((DateTime.Now - vFiles[i].LastWriteTime).Days > 7)
69 {
70 vFiles[i].Delete();
71 }
72 }
73 }
74 }
75
76 } // end class
其中,第8行-第26行是關於實現單例模式的一種方法。這樣,在你程序的需要位置執行:
LogManager.LogInstance.WriteLog("產生了一條日志記錄");
就會在指定文件中參數一條日子記錄了。
即:2016-11-23 23:53:45 >> 產生了一條日志記錄