Tạo log hệ thống
Bài viết này sẽ hướng dẫn các bạn tạo log hệ thống trong Yii1
Bước 1: Tạo bảng lưu log
CREATE TABLE `audit_log` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT NULL,
`ip_address` VARCHAR(45) NULL,
`model` VARCHAR(100) NOT NULL,
`record_id` INT NOT NULL,
`action` ENUM('INSERT','UPDATE','DELETE') NOT NULL,
`changed_fields` JSON NULL,
`before` JSON NULL,
`after` JSON NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `idx_user_id` (`user_id`),
KEY `idx_model` (`model`),
KEY `idx_record_id` (`record_id`),
KEY `idx_action` (`action`),
KEY `idx_created_at` (`created_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Bạn có thể dùng bảng này cho mọi phiên bản MySQL
CREATE TABLE `audit_log` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT NULL,
`ip_address` VARCHAR(45) NULL,
`model` VARCHAR(100) NOT NULL,
`record_id` INT NOT NULL,
`action` VARCHAR(20) NOT NULL,
`changed_fields` TEXT NULL,
`before` TEXT NULL,
`after` TEXT NULL,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Bước 2: Tạo file: components/LogBehavior.php
class LogBehavior extends CActiveRecordBehavior
{
public function afterSave($event)
{
$action = $this->owner->isNewRecord ? 'INSERT' : 'UPDATE';
Yii::app()->db->createCommand()->insert('system_logs', [
'user_id' => Yii::app()->user->id,
'action' => $action,
'table_name' => get_class($this->owner),
'data' => json_encode($this->owner->attributes),
'created_at' => new CDbExpression('NOW()'),
]);
}
public function afterDelete($event)
{
Yii::app()->db->createCommand()->insert('system_logs', [
'user_id' => Yii::app()->user->id,
'action' => 'DELETE',
'table_name' => get_class($this->owner),
'data' => json_encode($this->owner->attributes),
'created_at' => new CDbExpression('NOW()'),
]);
}
}
Bước 3: Gán trong từng model hoặc toàn hệ thống
- Gán trong mỗi model:
public function behaviors()
{
return [
'LogBehavior' => [
'class' => 'application.components.LogBehavior',
],
];
}
- Hoặc gán toàn hệ thống trong config/main:
'components'=>[
...
],
'behaviors'=>[
'LogBehavior' => [
'class'=>'application.components.LogBehavior',
],
]
https://tritue.edu.vn/tuecode/tracnghiem30/site/data/YVdRc01qUTBMRjl5YjNWMFpTeGlZV2wyYVdWMEwzQnZjM1F2ZG1sbGR3PT0%3D