天天看點

【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)

1、引言

在上位機開發中,日志記錄是必不可少的,我們可以通過日志記錄做日志分析及錯誤追蹤。初學者會采用txt文本寫入來實作日志儲存,但是文本寫入不是線程安全,當存在多個線程同時寫入日志時,就會出現一些問題。Log4net庫是.Net下一個非常優秀的開源日志記錄元件,是一個幫助開發者将日志資訊輸出到各種目标(控制台、檔案、資料庫等)的工具。本節主要采用開源元件Log4Net來實作錯誤ERROR資訊文本存儲,并結合SQLite資料庫,将日志INFO資訊存儲到資料庫中,便于後續的查詢。+vx:xiketang777領取源碼

2、開發準備

  • 首先建立一個Windows窗體應用,取名為thinger.cn.Log4NetSQLitePro,UI界面設計如下所示:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)
  • 通過Nuget添加Log4Net開源元件,如下所示:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)
  • 通過Nuget添加SQLite元件,如下所示:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)

3、文本存儲

一般情況下,我們可以将一些錯誤及異常資訊存儲在文本中,便于随時打開檔案進行查詢,文本存儲将自動以天為機關,每天對應一個檔案,步驟如下:

  • 添加一個應用程式配置檔案項目右擊添加建立項,項目類型選擇應用程式配置檔案,名稱為log4net.config,如下所示:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)
  • 配置檔案編寫日志配置檔案增加相關節點,如下所示:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)

配置檔案規定了日志資訊的相關屬性、存儲方式、日志内容格式等,配置資訊如下所示:

【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)

其中,較為重要的是日志資訊的格式,對應上面檔案中的ConversionPattern,值為"[%d]%n%m%n%n",每個占位符有對應的含義,如下所示:+vx:xiketang777領取源碼

字元格式

說明%m(message)輸出的日志消息%n(newline)換行%d(datetime)輸出目前語句運作的時刻%r(runtime)輸出程式執行到目前消耗的毫秒數%t(threadid)目前語句所在的線程ID%p(priority)日志的目前日志級别%c(class)目前日志對象的名稱%L輸出語句所在的行号%F輸出語句所在的檔案名%-10最小長度為10,不夠空格填充

  • 配置檔案屬性中的複制到輸出目錄,設定為始終複制或如果較新則複制,如下圖所示:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)
  • 項目的AssemblyInfo.cs類中添加一行代碼,如下所示:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)
  • 添加一個LogHelper類,編寫2個Error的方法,如下所示:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)
  • 在ini文本存儲按鈕事件下,調用錯誤日志寫入,如下所示:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)
  • 執行完成後,在項目目錄,Log\Error目錄下,産生一條當天日志命名的檔案,打開如下所示:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)

4、SQLite存儲

日志資訊存儲到資料庫的好處在于便于使用者通過界面進行查詢,這裡采用開源免費資料庫SQLite,其他關系型資料庫,如SQLServer、mysql,原理都是一樣的,具體步驟如下所示:

  • 建立資料庫及資料表通過SQLiteStudio軟體建立一個資料庫,取名為Log4NetSQLite,執行以下腳本建立一個Log資料表:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)
  • 将資料庫檔案複制到項目根目錄下的DataBase檔案夾中
  • 修改log4net.config檔案,增加資料庫存儲相關配置,如下所示:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)

bufferSize:日志緩存寫入條數 設定為0時隻要有一條就立刻寫到資料庫

connectionString:SQLite指向的是資料庫檔案的絕對路徑

  • LogHelper類中增加一個Info方法,如下所示:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)
  • 在SQLite存儲按鈕事件下,調用Info日志寫入,如下所示:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)
  • 執行完成後,打開資料庫,檢視是否有相關記錄:
【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)

5、實際應用

通過上面一系列的描述,相信大家對Log4Net的應用有了一些了解,Log4Net建構的日志系統是很多項目必備的一個功能,對項目開發、調試及後續維護都有着至關重要的作用。實際使用時,我們還可以将Log4Ne作為一個簡單的資料存儲工具,甚至可以使用Log4Net做多表多庫存儲,這些内容後續再給大家進行介紹。

6、寫在最後【需要源碼必看】

最近發現越來越多的小夥伴投入到C#上位機學習中,初學者學習最大的困擾就是無人交流,可以+vx:xiketang777 拉你進入工控上位機學習交流群,歡迎各位小夥伴加入,僅限前200名,本文源碼也可通過加群擷取。

【新閣教育】基于Log4Net實作日志資訊雙向存儲(含源碼)