前言
我们在做企业管理系统时,有多多少少都有对数据的完整性有所要求,比如要求系统不能物理删除记录,要求添加每一条数据时都要有系统记录、或者更新某条数据都需要跟踪到变化的内容、或者删除数据时需要记录谁删除了,何时删除了,以便误删后可以通过系统的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(操作日志)——用来记录用户对各种业务操作的内容情况。
下篇将讨论用代码如何实现日志管理的功能,下面先来几张图:
日志列表:
查看日志内容: