對於一個完整的程序系統,一個日志記錄是必不可少的。可以用它來記錄程序在運行過程中的運行狀態和報錯信息。比如,那些不想通過彈框提示的錯誤,程序執行過程中捕獲的異常等。
首先,在你的解決方案中,適當的目錄中新建一個類,比如 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 >> 產生了一條日志記錄