自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

淺談管理系統(tǒng)操作日志設(shè)計(附操作日志類)

開發(fā) 前端 項目管理
打個比方,用戶需要購買一樣寶貝,已經(jīng)到了下單那步,下單就是個業(yè)務(wù),這個業(yè)務(wù)背后就是一系列的業(yè)務(wù),如:生成訂單 → 生成商品快照 → 發(fā)送一條站內(nèi)信 → 刪除購物車?yán)飳?yīng)寶貝。

管理系統(tǒng)的操作日志如何做成通用的模塊一直是個讓我頭疼的問題,不過看了博客園里的某篇文章后,現(xiàn)在基本解決了。

相關(guān)文章鏈接:《系統(tǒng)操作日志設(shè)計

在開始做之前,必須把兩個日志分清楚,那就是普通操作日志和業(yè)務(wù)操作日志,這兩者有何區(qū)別?

在我理解,普通操作日志就是單表的操作記錄,而業(yè)務(wù)操作日志則就是一系列的普通操作日志的集合。

打個比方,用戶需要購買一樣寶貝,已經(jīng)到了下單那步,下單就是個業(yè)務(wù),這個業(yè)務(wù)背后就是一系列的業(yè)務(wù),如:生成訂單 → 生成商品快照 → 發(fā)送一條站內(nèi)信 → 刪除購物車?yán)飳?yīng)寶貝。

這樣一個下單操作就包含了4部分,可以把這4部分看成是4張表,分別對這4張表進(jìn)行對應(yīng)的操作,就實現(xiàn)了業(yè)務(wù)。

但今天我要講的不是業(yè)務(wù)操作日志,因為不同項目的業(yè)務(wù)不盡相同,所以它無法做成通用模塊,而我要講的,就是普通操作日志。

上面解釋了一大段,下面干貨就要亮相了,先洗把臉清醒下。

首先,哪些地方需要記錄操作日志?執(zhí)行insert、update、delete這3個操作的時候,就需要進(jìn)行日志,而日志執(zhí)行的先后順序如下

 

順序清楚后,就來看下我寫的一份日志操作類吧,***版隨便謝謝的,重復(fù)代碼有點多,還未來得及優(yōu)化。

  1. class LOG{  
  2.     protected $primaryid;  
  3.     protected $tbid;  
  4.     protected $tbname;  
  5.     protected $keys;  
  6.     protected $values;  
  7.     /**  
  8.      * 參數(shù)說明  
  9.      * int              $tbid       查詢指定表的id  
  10.      * string           $tbname     數(shù)據(jù)庫表名  
  11.      */ 
  12.     public function insert($tbid$tbname){  
  13.         global $db;  
  14.         //查詢表注釋  
  15.         $db->query('show table status where name = "'.$tbname.'"');  
  16.         $tb = $db->fetch();  
  17.         //插入日志主表  
  18.         $returnid = $db->insert(0, 2, 'tb_log'array(  
  19.             'adminid = '.$_SESSION['admin']['id'],  
  20.             'type = 1',  
  21.             'tableid = '.$tbid,  
  22.             'tablename = "'.$tbname.'"',  
  23.             'comment = "'.$tb['Comment'].'"',  
  24.             'dt = now()' 
  25.         ));  
  26.         //查詢字段注釋  
  27.         $db->query('show full columns from '.$tbname);  
  28.         $tb = $db->fetchAll();  
  29.         foreach($tb as $v){  
  30.             $commentArray[$v['Field']] = $v['Comment'];  
  31.         }  
  32.         //查詢所有字段信息,插入日志從表  
  33.         $rs = $db->select(0, 1, $tbname'*''and tbid = '.$tbid);  
  34.         $keys = array_keys($rs);  
  35.         $values = array_values($rs);  
  36.         for($i = 0; $i < count($keys); $i++){  
  37.             $db->insert(0, 0, 'tb_log_content'array(  
  38.                 'logid = '.$returnid,  
  39.                 'tbkey = "'.$keys[$i].'"',  
  40.                 'tbvalue = "'.$values[$i].'"',  
  41.                 'comment = "'.$commentArray[$keys[$i]].'"' 
  42.             ));  
  43.         }  
  44.     }  
  45.     public function updateStart($tbid$tbname){  
  46.         global $db;  
  47.         //查詢表注釋  
  48.         $db->query('show table status where name = "'.$tbname.'"');  
  49.         $tb = $db->fetch();  
  50.         //插入日志主表  
  51.         $returnid = $db->insert(0, 2, 'tb_log'array(  
  52.             'adminid = '.$_SESSION['admin']['id'],  
  53.             'type = 2',  
  54.             'tableid = '.$tbid,  
  55.             'tablename = "'.$tbname.'"',  
  56.             'comment = "'.$tb['Comment'].'"',  
  57.             'dt = now()' 
  58.         ));  
  59.         //查詢修改前數(shù)據(jù)信息  
  60.         $rs = $db->select(0, 1, $tbname'*''and tbid = '.$tbid);  
  61.         $keys = array_keys($rs);  
  62.         $values = array_values($rs);  
  63.         $this->primaryid = $returnid;  
  64.         $this->tbid = $tbid;  
  65.         $this->tbname = $tbname;  
  66.         $this->keys = $keys;  
  67.         $this->values = $values;  
  68.     }  
  69.     public function updateEnd(){  
  70.         global $db;  
  71.         //查詢字段注釋  
  72.         $db->query('show full columns from '.$this->tbname);  
  73.         $tb = $db->fetchAll();  
  74.         foreach($tb as $v){  
  75.             $commentArray[$v['Field']] = $v['Comment'];  
  76.         }  
  77.         //查詢修改后數(shù)據(jù)信息  
  78.         $rs = $db->select(0, 1, $this->tbname, '*''and tbid = '.$this->tbid);  
  79.         $currentvalues = array_values($rs);  
  80.         //前后信息進(jìn)行比較  
  81.         for($i = 0; $i < count($currentvalues); $i++){  
  82.             if($this->values[$i] !== $currentvalues[$i]){  
  83.                 $db->insert(0, 0, 'tb_log_content'array(  
  84.                     'logid = '.$this->primaryid,  
  85.                     'tbkey = "'.$this->keys[$i].'"',  
  86.                     'tbvalue = "'.$this->values[$i].'"',  
  87.                     'currenttbvalue = "'.$currentvalues[$i].'"',  
  88.                     'comment = "'.$commentArray[$this->keys[$i]].'"' 
  89.                 ));  
  90.             }  
  91.         }  
  92.     }  
  93.     public function delete($tbid$tbname){  
  94.         global $db;  
  95.         //查詢表注釋  
  96.         $db->query('show table status where name = "'.$tbname.'"');  
  97.         $tb = $db->fetch();  
  98.         //插入日志主表  
  99.         $returnid = $db->insert(0, 2, 'tb_log'array(  
  100.             'adminid = '.$_SESSION['admin']['id'],  
  101.             'type = 3',  
  102.             'tableid = '.$tbid,  
  103.             'tablename = "'.$tbname.'"',  
  104.             'comment = "'.$tb['Comment'].'"',  
  105.             'dt = now()' 
  106.         ));  
  107.         //查詢字段注釋  
  108.         $db->query('show full columns from '.$tbname);  
  109.         $tb = $db->fetchAll();  
  110.         foreach($tb as $v){  
  111.             $commentArray[$v['Field']] = $v['Comment'];  
  112.         }  
  113.         //查詢所有字段信息,插入日志從表  
  114.         $rs = $db->select(0, 1, $tbname'*''and tbid = '.$tbid);  
  115.         $keys = array_keys($rs);  
  116.         $values = array_values($rs);  
  117.         for($i = 0; $i < count($keys); $i++){  
  118.             $db->insert(0, 0, 'tb_log_content'array(  
  119.                 'logid = '.$returnid,  
  120.                 'tbkey = "'.$keys[$i].'"',  
  121.                 'tbvalue = "'.$values[$i].'"',  
  122.                 'comment = "'.$commentArray[$keys[$i]].'"' 
  123.             ));  
  124.         }  
  125.     }  

使用前,需要引入數(shù)據(jù)庫操作類,這是我之前寫的一份,可參考《全新的PDO數(shù)據(jù)庫操作類(僅適用Mysql)》。

引入之后,就可以開始使用了。

select

  1. $log->insert(82, 'tb_member'); 

update

  1. $log->updateStart(82, 'tb_member');   
  2. //中間放更新操作代碼   
  3. $log->updateEnd(); 

delete

  1. $log->delete(82, 'tb_member'); 

可以看到,一共只需要兩個參數(shù)即可,分別是表ID(主鍵)和表名稱。

另外需要強(qiáng)調(diào)一點,表注釋和字段注釋一定要完整,因為記錄的信息包含注釋,目的就是為了查閱的時候能清楚哪個字段是干什么用的。

下面就看下成品吧

***把表結(jié)構(gòu)分享下,一共2張表,一張主表一張從表,主表記錄操作表及操作人等信息,從表記錄操作的表字段信息。

  1. -- ----------------------------   
  2. -- Table structure for `tb_log`   
  3. -- ----------------------------   
  4. CREATE TABLE `tb_log` (   
  5.   `tbid` bigint(20) NOT NULL AUTO_INCREMENT,   
  6.   `adminid` bigint(20) DEFAULT NULL COMMENT '管理員id',   
  7.   `type` tinyint(4) DEFAULT '1' COMMENT '操作類型:1新增2修改3刪除',   
  8.   `tableid` bigint(20) DEFAULT NULL,   
  9.   `tablename` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT '表名',   
  10.   `comment` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,   
  11.   `dt` datetime DEFAULT NULL,   
  12.   PRIMARY KEY (`tbid`)   
  13. ) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;   
  14.     
  15. -- ----------------------------   
  16. -- Table structure for `tb_log_content`   
  17. -- ----------------------------   
  18. CREATE TABLE `tb_log_content` (   
  19.   `tbid` bigint(20) NOT NULL AUTO_INCREMENT,   
  20.   `logid` bigint(20) DEFAULT NULL,   
  21.   `tbkey` longtext COLLATE utf8_unicode_ci,   
  22.   `tbvalue` longtext COLLATE utf8_unicode_ci,   
  23.   `currenttbvalue` longtext COLLATE utf8_unicode_ci,   
  24.   `comment` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,   
  25.   PRIMARY KEY (`tbid`)   
  26. ) ENGINE=InnoDB AUTO_INCREMENT=109 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; 

原文鏈接:http://www.cnblogs.com/hooray/archive/2012/09/05/2672133.html

【編輯推薦】

  1. ASP.NET MVC3 的一個OutputCache問題
  2. Winform開發(fā)框架之系統(tǒng)登錄實現(xiàn)
  3. JavaScript項目優(yōu)化總結(jié)
  4. 項目模塊開發(fā)——切dvd庫
  5. 如何掌握程序語言
責(zé)任編輯:張偉 來源: 胡尐睿的博客
相關(guān)推薦

2024-01-04 07:55:32

系統(tǒng)操作日志接口

2009-12-11 17:55:59

Linux操作系統(tǒng)

2024-04-25 08:24:51

C#系統(tǒng)操作日志

2012-06-01 09:57:54

Linux服務(wù)器Linux操作系統(tǒng)

2019-07-04 10:17:52

操作日志系統(tǒng)

2011-07-25 09:39:10

Linux服務(wù)器操作系統(tǒng)

2019-12-17 18:04:09

操作系統(tǒng)Linux中央處理器

2010-05-28 18:16:43

MySQL 操作日志

2020-08-31 07:00:00

Android安卓日志分析

2010-04-15 15:32:59

Oracle操作日志

2023-03-06 11:36:13

SpingBoot注解

2023-12-17 14:36:05

2009-07-14 18:35:53

MyEclipse實用

2009-09-08 15:19:52

Linq Where操

2023-10-31 18:42:21

2012-08-29 13:39:29

2022-05-31 08:04:30

前端設(shè)計模式

2023-11-06 01:17:25

主機(jī)容器選項

2023-02-10 09:40:26

systemd日志

2011-01-19 10:42:15

點贊
收藏

51CTO技術(shù)棧公眾號