操作日志记录
对操作日志进行记录,这个可以清晰的对用户(管理员)的操作行为进行记录。这个对于后期的一些必要查询等操作是很方便的。
YII2日志框架
Yii提供了一个强大的日志框架,这个框架具有高度的可定制性和可扩展性。使用这个框架, 你可以轻松地记录各种类型的消息,过滤它们, 并且将它们收集到不同的目标,诸如文件,数据库,邮件。
使用Yii日志框架涉及下面的几个步骤:
- 在你代码里的各个地方记录 log messages;
- 在应用配置里通过配置 log targets 来过滤和导出日志消息;
- 检查由不同的目标导出的已过滤的日志消息(例如:Yii debugger)。
在这个地方,我简单的展示一下Log框架的部分功能,因为我们今天所使用的是自定义的操作日志功能实现。
点击了解YII2日志框架详情
下载一个Yii2框架,修改config->web.php文件:
...
'log' => [
//设置 flushInterval 和 exportInteval 属性的值为 1 所有日志消息立即导出在日志文件中
'flushInterval' => 1,
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
//注释日志目标级别(levels )属性。
//所有类别的日志消息(错误,警告,信息,跟踪)将会记录在日志文件中。
'class' => 'yii\log\FileTarget',
'exportInterval' => 1,
'logVars' => [],
//'levels' => ['error', 'warning'],
],
],
],
...
然后在默认的SiteController控制器中添加actionLog方法
public function actionLog() {
Yii::trace('trace log message');
Yii::info('info log message');
Yii::warning('warning log message');
Yii::error('error log message');
}
运行:域名/index.php?r=site/log
查看: app/runtime/logs 目录下的 app.log 文件,会出现相关的日志信息
自定义操作日志记录功能
使用beforAction方法:
Controller或者ActiveController的拦截器是在behavior中进行定义的,而Controller/ActiveController的拦截器的函数必须定义beforeAction 和afterAction,这是为什么呢,因为这是当前父类Controller的父类\yii\web\Controller定义的。
不过这个地方我们暂时不使用behavior行为,单纯的使用beforAction方法来进行实现。
我写一个例子:TestController控制器继承自公共控制器CommonController,CommonTroller控制器又继承自ActiveRecord
CommonController:
<?php
/**
* Created by PhpStorm.
* User: 0375
* Date: 2018/4/27
* Time: 14:34
*/
namespace app\modules\v1\controllers;
use yii;
use yii\rest\ActiveController;
class CommonController extends ActiveController
{
public function beforeAction($action)
{
parent::beforeAction($action);//进行父类重写
$controller = Yii::$app->controller->id;//控制器名称
$action = $this->action->id;//方法名称
$ip = $_SERVER["REMOTE_ADDR"];//用户IP
$info = 'IP:'.$ip.'----'.'操作URL:'.$controller.'/'.$action;
file_put_contents("a.txt",$info);//模拟插入数据库暂时写入文件中,你可以直接插入数据库
return true;
}
}
TestController:
/**
* Displays testpage.
*
* @return string
*/
public function actionTest()
{
return $this->render('test');
}
访问:域名/index.php?r=test/test跳转到test页面,但是此时在web根目录下会出现一个a.txt文件,里面就是先关的操作记录
如下:IP:127.0.0.1—-操作URL:test/test
这样,稍作修改,一个简单的操作日志记录功能就实现了。