yii migrate --migrationPath=@yii/log/migrations

当然categories我们也可以指定为YII的类
'log' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], [ //日志处理器类,这里我改用数据库存日志了 'class' => 'yii\log\DbTarget', //日志记录的级别,这里演示设为info 'levels' => ['info'], //定义分类 'categories' => ['yii\db\*'], ], ], ],
然后我们操作一下数据库,看是否日志记录了。
<?php
namespace app\controllers;
use YII;
use yii\db\Query;
use yii\web\Controller;
class TestController extends Controller
{
public function actionTest()
{
$data = (new Query())->from('{{%user}}')
->where('id=:id', [':id' => '1'])
->all();
var_dump($data);
}
}

日志消息的格式化,我们可以自定义日志的前缀。
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
[
//日志处理器类,这里我改用数据库存日志了
'class' => 'yii\log\DbTarget',
'levels' => ['error', 'warning'],
//定义分类
'categories' => ['db'],
//定义前缀
'prefix' => function($message) {
$uid = !empty(YII::$app->user->id) ? YII::$app->user->id : '-';
$mid = !empty(YII::$app->module->id) ? YII::$app->module->id : '-';
$cid = !empty(YII::$app->controller->id) ? YII::$app->controller->id : '-';
$aid = !empty(YII::$app->controller->action->id) ? YII::$app->controller->action->id : '-';
return "[{$uid}][{$mid}/{$cid}/{$aid}]";
},
],
],
],
使用如下代码,记录日志,查看效果
YII::warning('我是警告!!!', 'db');
YII::error('我是错误!!!', 'db');

由于没有登陆和分模块,所以没获取到用户ID和模块ID,不过控制器ID和方法ID都获取到了。
消息的刷新和导出
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
//消息被存放在一个数组里,积累到一定数量,才会被刷新到日志target
//通过flushInterval设置消息刷新到日志target的数量
'flushInterval' => 100,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
[
//日志处理器类,这里我改用数据库存日志了
'class' => 'yii\log\DbTarget',
//当消息刷新到日志对象时,并不会立即导出,只有累积到一定数量才会导出
//通过exportInterval来设置这个导出数量
'exportInterval' => 100,
'levels' => ['error', 'warning'],
//定义分类
'categories' => ['db'],
],
],
],
内容版权声明:除非注明,否则皆为本站原创文章。
