1. 程式人生 > >ASP.NET全棧開發日誌模塊之操作日誌的設計

ASP.NET全棧開發日誌模塊之操作日誌的設計

用戶管理 com 分享圖片 一行 ble net 數據表 操作 通過

應用程序中的日誌大致分為三種

第一種:用於生產模式下追中bug的異常日誌。(這類日誌相信大家都懂)

第二種:用於記錄重要操作的行為日誌。(這類日誌主要作用是溯源,行為主要有三種:增、刪、改)

第三種:用於記錄歷史瀏覽的消息日誌。(這類日誌主要記錄用戶的瀏覽痕跡)

消息日誌和行為日誌有點相似,都有溯源的作用,但它們區別很明顯。

消息日誌記錄的是所有操作信息,比如 “gxqsd 登錄了 系統 2018-7-27 23:46:10” , "gxqsd 訪問了用戶管理首頁", “gxqsd 查看了 liming 的個人信息”,總而言之他更像一句話,也像是瀏覽記錄,我們針對每一個消息日誌存儲一個Url就能依次回溯。(所以消息日誌不包含對數據的操作,那屬於行為日誌)

行為日誌主要是記錄數據的變化,比如 "gxqsd 新增了一個角色 " 這時候觸發了新增操作,我們希望將這個行為記錄下來,如果只是記錄了 “gxqsd 新增了一個角色” 那顯然他就有點像消息日誌了,但它又不能用於做歷史記錄。所以作為行為日誌最重要的是要記錄數據的變化。因此針對 "gxqsd 新增了一個角色”,正確的辦法應是將新增的角色實體信息存儲下來。

接下來用一張簡單的圖來描述數據庫表之間的關系。

技術分享圖片

我們定義一個日誌記錄表Logging,每一行數據表示一條行為日誌。用LogDataDetial表示行為日誌的詳細信息

其中Logging表中TargetId表示實體操作的目標對象,比如"gxqsd create a new user" TableName 則是"User" 而TargetId則表示這個新增的用戶的Id,通過Table和TargetId我們最終就能在追溯的時候定位到具體實體。

LogDataDetail表就挺簡單的了,Logging表示每一條行為日誌,而每一個行為日誌所改變的數據是以實體為單位的,實體又有多個字段,為了能詳細追蹤實體數據的變化,LogDataDetail將實體的每一個屬性分解成猶如鍵值對的形式。又通過LogId將他們與具體行為日誌關聯起來。而每一個Logging又與操作用戶關聯起來。

ASP.NET全棧開發日誌模塊之操作日誌的設計