日志對於一個系統來說是很重要的一部分,可分為系統日志和操作日志。
系統日志一般用於記錄系統中的異常,BUG,該類日志主要用於開發人員進行問題分析,定位
操作日志一般用於記錄用戶在系統中所做的各種操作,該類日志的用處很多,比如可以查看某個人在什么時間做了什么操作(責任追蹤)、分析哪些功能模塊用戶使用得比較多比較感興趣(用於優化等)、用戶反饋問題時,開發人員可以根據日志中用戶的操作來重現問題(這個對開發人員還是蠻有用的,親身體驗,用戶經常反饋一些問題,他也不會給你詳細解釋是在什么情況下做什么操作的,只是說我現在遇到這個問題了;這個時間就只有去看操作日志,根據用戶的操作來重現他的所遇到的問題);日志的用處就不一一列舉了。
系統中的錯誤日志可簡單的重寫頁面的OnError事件來進行日志的寫入,一般只需要記錄時間,用戶,報錯的詳細信息也就可以了
操作日志,根據業務的需求不同,記錄的日志內容也不一樣;看到有些系統中的操作日志記錄得比較全,但很多地方都可以看到寫日志的操作;這樣做的優點時:在一條日志記錄中可以記錄得很詳細,日志內容可以根據業務的需求來描述;缺點是所有需要記錄日志的地方都得手動寫記錄日志的代碼,比較麻煩。
那么有沒一種解決方案是可以不需要在系統的各個角落都去手動寫日志記錄的方法呢??
可以看到我們現在用到很多的平台、框架,在最終與數據庫打交道的地方幾乎都是集中在某一個地方,在這里會生成執行的SQL語句,既然系統中所有的執行增刪改查的操作都要經過這里,那么我們可以在這里進行日志記錄(一般情況下,只有對數據進行增、刪、改才是需要記錄日志的)。
在這里獲取到一條執行SQL的語句,對該語句進行解析,可以解析出該語句是對什么表進行了什么操作,操作的字段有哪些,操作的值都是些什么值。獲取到這些數據后需要怎么來記錄呢??答案是根據配置文件來進行操作。
下面講講配置文件
先上一小段配置文件
<Table Name="Member" Desc="會員" >
<Value field="cardnum">卡號:</Value>
<State>
<Fileds filed="type" >
<Value para="1">辦卡</Value>
<Value para="2">充值</Value>
<Value para="3">退卡</Value>
<Value para="4">補卡</Value>
<Value para="5">掛失</Value>
<Value para="6">恢復</Value>
</Fileds>
<Fileds filed="invoice">
<Value para="1">開發票</Value>
</Fileds>
</State>
</Table>
解釋一下這段配置
Table:一個表,表名,對應的說明
Value:一般對應這個表的唯一鍵字段
State:一些特殊的字段,比如某個字段的值修改為特殊值時,代表是什么操作
再看看數據庫中的日志表:
ID int 自增
LogTime datetime 時間
UserName nvarchar(50) 用戶
OptType nvarchar(50) 操作類型
OptObject nvarchar(50) 操作對象
Value nvarchar(50) 操作值
有了以上這些,現在就好辦了;
添加:比如一條語句是inert into Member values('0001','大神')
根據上述的SQL語句解析及配置文件的對比,我們可以得出:當前是進行添加,是添加的會員,會員的卡號是0001
這樣就可以生成一條簡單的日志記錄了;
刪除:與添加類似,但在刪除之前需要先將刪除的數據查詢出來,不然可能會獲取不到到底是刪除了哪個會員
修改:稍麻煩一點,普通的刪除可以簡單的記錄XX修改了會員0001,或者可以詳細記錄哪些字段由什么值修改為什么值(這樣記錄用戶或許會看不懂,比如一些狀態值,這里就需用到配置文件中的Filed了)
比如修改Member表Type字段,修改后為1則規定為辦卡,2為充值等等,這時我們的日志就是XX充值會員卡,卡號是0001;
至此一個簡單的日志記錄系統就完成啦,下面來點最終生成的日志數據
195 2009-09-18 09:10:38.000 admin 修改密碼 會員卡 卡號:000047 198 2009-09-18 10:42:29.000 admin 修改密碼 會員卡 卡號:000053 337 2009-09-19 12:20:06.000 admin 修改密碼 會員卡 卡號:000040 710 2009-09-22 11:49:14.000 admin 修改密碼 會員卡 卡號:000026 811 2009-09-23 10:15:29.000 admin 辦卡 會員卡 卡號:000062 1159 2009-09-25 21:39:38.000 admin 充值 會員卡 卡號:000005 1173 2009-09-26 09:57:00.000 admin 修改密碼 會員卡 卡號:000027 1429 2009-09-27 21:38:40.000 admin 辦卡 會員卡 卡號:000064 1560 2009-09-30 14:53:40.000 admin 辦卡 會員卡 卡號:000063 1562 2009-09-30 15:02:54.000 admin 充值 會員卡 卡號:000063 1751 2009-10-02 16:55:09.000 admin 辦卡 會員卡 卡號:000065 1908 2009-10-04 12:05:52.000 admin 辦卡 會員卡 卡號:000066 1976 2009-10-04 17:36:55.000 admin 充值 會員卡 卡號:000013 2123 2009-10-06 13:04:26.000 admin 辦卡 會員卡 卡號:000067 2236 2009-10-07 14:28:07.000 admin 辦卡 會員卡 卡號:000068 2264 2009-10-07 16:52:44.000 admin 充值 會員卡 卡號:000028 2286 2009-10-07 17:59:58.000 admin 充值 會員卡 卡號:000049 2326 2009-10-08 11:28:40.000 admin 辦卡 會員卡 卡號:000069 2553 2009-10-09 15:10:37.000 admin 辦卡 會員卡 卡號:000070 2640 2009-10-09 22:26:48.000 admin 充值 會員卡 卡號:000007 2778 2009-10-11 11:34:02.000 admin 修改密碼 會員卡 卡號:000017 3141 2009-10-14 11:56:43.000 admin 辦卡 會員卡 卡號:000071 3170 2009-10-14 15:46:17.000 admin 辦卡 會員卡 卡號:000072 3172 2009-10-14 15:46:49.000 admin 修改密碼 會員卡 卡號:000072 3297 2009-10-15 17:33:28.000 admin 充值 會員卡 卡號:000014 3486 2009-10-17 15:48:16.000 admin 辦卡 會員卡 卡號:000073
優點:只需要將日志記錄那部分代碼寫好后就不需要再更改了,如果需要添加新的日志,只需要添加配置即可,方便、簡單,不需要到項目的各個角落都去寫日志記錄的代碼
缺點:日志記錄的信息比較僵硬,描述不夠直觀;
大概就這樣實現就OK了,大伙看看有啥意見可以提出來討論討論,也歡迎拍磚。
