SAS框架之文本日志幫助類——TextLogHelper


       說到日志,大家都清楚,無非就是記錄:誰,在什么時候,做了什么/發生了什么錯誤,是不是覺得很簡單。這次我也來做一回輪子,一步步教你如何寫自己的日志幫助類。

       在開始之前我們需要分析一下日志幫助類(這里主要指文本日志)有哪些地方需要注意的:

1)、日志幫助類是用靜態類,還是用?

2)、日志發生者通過什么方式傳入,參數,還是?

3)、日志通過什么方式寫,同步還是異步?

4)、日志文件保存位置和文件大小控制。

5)、擴展問題。

 

暫時個人只找到這么多,望大家補充。

        下面我就來說自己在這些方面是如何處理的

一、日志幫助類是用靜態類,還是用?

       我的選擇是非靜態類,即通過實例化的方式獲取日志幫助類對象,然后調用方法寫日志,具體代碼為:

TextLogHelper LogHelper = new TextLogHelper();

LogHelper.WriteLog(......);

       為何要這樣做呢?其實說起來,自己當初寫的好多東西都是靜態,如靜態類,靜態對象、靜態方法等等,因為那玩意兒好使啊,寫起來方便,調用更加方便,為何不用。但是在不斷的碼農生活中,自己慢慢覺得有時候靜態的東西也並不好使,例如:

       1)、靜態公共字段/屬性:並發問題,因為調用方都可能會修改值。這里只是說可能存在這種情況;

       2)、公共方法:參數個數問題。因為是靜態方法,所以方法內部所需要的信息,只能通過參數的形勢傳入;

       3)、靜態字段、屬性維護問題,因為靜態的字段太多,太雜,維護起來自然增加了難度。

       4)、面向對象程序開發的一個核心就是多態,所以如果用靜態類的話,就不可能實現多態了。

       至於其他的這里就不一一列舉了。還有一點需要指出的是,上述幾點只是想說靜態類存在這些問題,但並非表示任何情況都不適合用靜態類,如工具類,數據轉換類等,就可以采用靜態類方法實現。所以采用靜態類與否,還得根據實際情況而定。

 

二、日志發生者通過什么方式傳入,參數,還是?

三、日志通過什么方式寫,同步還是異步? 

四、日志文件保存位置和文件大小控制。

五、擴展問題。

        二、三、四、五幾點我就放在一塊來講述了。

        其實日志發生者存在兩種情況:一種是固定的日志發生在,如系統日志,或者框架內部日志;另外一種就是用戶日志,如Web應用程序中,不同的用戶登錄就會面臨不同的日志發生發生着。

        先來給出SAS框架中的文本日志類的兩個構造函數:

private TextLogHelper(string logSavePath, bool asynMechanismLog, int logFileSize){...}

public TextLogHelper(Func<ILogUser> getLogUserHandler, string logSavePath, bool asynMechanismLog, int logFileSize){...}

public TextLogHelper(ILogUser logUser, string logSavePath, string asynMechanismLog, string logFileSize){...}

       通過上面幾個構造函數,你或許已經看出了上面端倪了:

       1)、日志文件保存路徑、同步/異步方式保存日志內容、日志文件大小問題的控制,都是通過構造函數參數傳入的.

       2)、日志用戶采用ILogUser的方式,也是為了便於擴展。在擴展方面其實還有一個ILogHelper接口,而本文要將的TextLogHelper就是繼承自ILogHelper接口。

       3)、日志發生着通過兩種方式傳入,第一種是委托方式,讓調用方來決定日志發生者是誰;第二種是直接傳遞日志用戶對象進去。

      下面給出ILogHelper接口的代碼。

 

 1  namespace SAS.Interface
 2 {
 3      #region using
 4      using System;
 5      #endregion
 6      ///   <summary>
 7       ///  NameSpace :: SAS.Interface
 8       ///  Creater :: Juvy[david.telvent@gmail.com]
 9       ///  Create Time :: 2011-11-13 7:50:47
10       ///  Function :: 日志幫助類基類
11       ///   </summary>
12       public  interface ILogHelper
13     {
14          ///   <summary>
15           ///  當前日志幫助類所使用的日志用戶
16           ///   </summary>
17          Func<ILogUser> GetLogUserHandler {  getset; }
18          ///   <summary>
19           ///  寫日志信息
20           ///   </summary>
21           ///   <param name="message"> 日志信息 </param>
22           void WriteLog( string message);
23          ///   <summary>
24           ///  寫日志信息
25           ///   </summary>
26           ///   <param name="message"> 日志信息 </param>
27           ///   <param name="methodName"> 當前出錯的方法名稱 </param>
28           void WriteLog( string message,  string methodName);
29          ///   <summary>
30           ///  寫日志信息
31           ///   </summary>
32           ///   <param name="ex"> 異常 </param>
33           void WriteLog(Exception ex);
34          ///   <summary>
35           ///  寫日志信息
36           ///   </summary>
37           ///   <param name="ex"> 異常 </param>
38           ///   <param name="message"> 日志信息 </param>
39           void WriteLog(Exception ex,  string message);
40          ///   <summary>
41           ///  寫日志信息
42           ///   </summary>
43           ///   <param name="ex"> 異常 </param>
44           ///   <param name="message"> 日志信息 </param>
45           ///   <param name="methodName"> 當前出錯的方法名稱 </param>
46           void WriteLog(Exception ex,  string message,  string methodName);
47     }
48 }

       日志接口包含五個寫日志的方法,一個獲取日志用戶的屬性。實現起來應該很簡單,所以至於如何實現,在這里就不多講了,留待自我發揮。

       現在說說本日志幫助類的兩點不足:

       1)、日志級別問題

       2)、日志類型問題

 

       好了,本片SAS框架之文本日志類就講到這里了,歡迎大家斧正!

 

 

ASP.NET開發技術交流群: 67511751

另:本人想找一些志同道合的人,可以是跟我一起交流技術的,或者是給予鼓勵和支持的,非誠勿擾,謝謝!

QQ:1054930154


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM