SAS架構之文本日誌協助類——TextLogHelper

來源:互聯網
上載者:User

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

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

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 { get; set; }
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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.