1. 程式人生 > >系統操作日誌設計

系統操作日誌設計

前言

我們在做企業管理系統時,有多多少少都有對資料的完整性有所要求,比如要求系統不能物理刪除記錄,要求新增每一條資料時都要有系統記錄、或者更新某條資料都需要跟蹤到變化的內容、或者刪除資料時需要記錄誰刪除了,何時刪除了,以便誤刪後可以通過系統的XXX功能來恢復誤刪的資料。

我將這種功能稱為操作日誌

為什麼要做操作日誌?

其實上文也描述了一些,其主要目的就是跟蹤到每一個使用者在系統的操作行為,如對資料進行查詢、新增、編輯或刪除甚至是登入等行為。更進一步的理解可以說是對使用者使用系統情況的跟蹤,對資料的跟蹤防止資料意外刪除、更改時有所記錄,有所依據,以便對資料的還原,從某種程式上可以保護資料的完整性。

系統設計

場景

我們現在有一張表叫Employee:

ID int
Name nvarchar(50)
Gender nvarchar(2)
DateCreated datetime
CreateUser nvarchar(50)

在aspx頁面中可能會有EmployeeEdit.aspx(用來新增或更新Employee資訊等操作),EmployeeList.aspx(用來查詢或進行刪除Employee資訊等操作)

好了,現在我們要對Empoyee表操作的資訊做一個系統日誌,那怎麼辦?

也許你可以建立多一個表跟Employee表一模一樣的,叫做EmployeeLog

ID int
Name nvarchar(50)
Gender nvarchar(2)
DateCreated datetime
CreateUser nvarchar(50)
LogCreated datetime
OperationType int

其中加多了一些附屬的資訊如LogCreated(日誌新增日期)和OperationType(查詢、新增、刪除、更新)

此時這種情況可能大家在做使用者登入日誌的時候是一件很常見的事件。

但……問題來了,假如我需要對錶EmployeeIncome(員工的收入情況)做日誌那怎麼辦?

好建立多一張表叫EmployeeIncomeLog

來記錄員工收入情況的操作日誌。

假如又需要對錶FixedAsset(固定資產)進行日誌記錄那又怎麼辦?

好了,大家可能意識到我們這樣做不但會造成表數量的增倍,而且大大的增加了工作量和開發時間,對資料庫表不易管理等情況。

因此我們需要一個能夠通過簡單的配置和編寫就可以完成以上功能的日誌管理

資料庫設計

系統日誌設計

包括三個表,

LogSetting(日誌設定)——用來儲存配置業務表名、業務名稱、主鍵等

LogSettingDetail(日誌設定明細)——用來儲存配置業務表需要記錄的詳細內容,如Employee表中,我們可能需要記錄欄位Name、Gender等資訊。

LogOperation(操作日誌)——用來記錄使用者對各種業務操作的內容情況。

下篇將討論用程式碼如何實現日誌管理的功能,下面先來幾張圖:

日誌列表:

日誌管理列表

檢視日誌內容:

檢視日誌內容