程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#實現程序單例日志輸出,

C#實現程序單例日志輸出,

編輯:C#入門知識

C#實現程序單例日志輸出,


對於一個完整的程序系統,一個日志記錄是必不可少的。可以用它來記錄程序在運行過程中的運行狀態和報錯信息。比如,那些不想通過彈框提示的錯誤,程序執行過程中捕獲的異常等。

首先,在你的解決方案中,適當的目錄中新建一個類,比如 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  >>  產生了一條日志記錄

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved