本文实例讲述了yii2框架中日志的配置与使用方法。分享给大家供大家参考,具体如下:
yii2中给我们提供了非常方便的日志组件,只需要简单配置一下就可以使用。
我们在config/web.php中配置如下:
return [//log必须在bootstrap期间就被加载,便于及时调度日志消息到目标'bootstrap' => ['log'],'components' => ['log' => [//消息跟踪级别,设置yii\log\dispatcher::tracelevel属性//yii_debug开启时,日志消息被记录时,追加最多3个调用堆栈信息'tracelevel' => yii_debug ? 3 : 0,//日志目标,可定义多个'targets' => [[//日志处理器类'class' => 'yii\log\filetarget',//日志记录的级别'levels' => ['error', 'warning'],//定义日志文件'logfile' => '@runtime/logs/test.log',],],],],];
通过下面5个方法,来写入我们自已的日志
//跟踪yii::trace('我是一条跟踪');//消息yii::info('我是一条消息');//调试yii::debug('我是一条调试');//警告yii::warning('我是一条警告');//错误yii::error('我是一条错误');
注意我们上面定义日志的levels为[‘error’, ‘warning’],所以日志只会记录这两个级别的信息。
有些时候我们并不希望把所有日志写在一起,我们会根据不同模块来写日志,这样以便区分,这就需要用到日志的分类了。
重新配置config/web.php如下:
'log' => ['tracelevel' => yii_debug ? 3 : 0,'targets' => [[//日志处理器类,这里我改用数据库存日志了'class' => 'yii\log\dbtarget',//日志记录的级别'levels' => ['error', 'warning'],//追加上下文信息,默认yii会包含php全局变量,这里我们不需要,设为空。'logvars' => [],//定义分类'categories' => ['db'],],[//日志处理器类,这里我改用数据库存日志了'class' => 'yii\log\dbtarget',//日志记录的级别'levels' => ['error', 'warning'],//追加上下文信息,默认yii会包含php全局变量,这里我们不需要,设为空。'logvars' => [],//定义分类'categories' => ['pay'],],],],
通过如下方法,添加我们的日志
//警告yii::warning('我是一条数据库警告', 'db');//错误yii::error('我角声满天秋色里是一条数据库错误', 'db');//警告yii::warning('我是一条支付警告', 'pay');//错误yii::error('我是一条支付错误', 'pay');
由于上面的配置我们使用了dbtarget,我们还需要添加一张日志表,用于记录我们的日志,进入项目目录。运行如下命令:
yii migrate --migrationpath=@yii/log/migrations
当然categories我们也可以指定为yii的类
'log' => ['trace伤心的话题level' => yii_debug ? 3 : 0,'targets' => [['class' => 'yii\log\filetarget','levels' => ['error', 'warning'],],[//日志处理器类,这里我改用数据库存日志了'class' => 'yii\log\dbtarget',//日志记录的级别,这里演示设为info'levels' => ['info'],//定义分类'categories' => ['yii\db\*'],],],],
然后我们操作一下数据库,看是否日志记录了。
<?phpnamespace app\controllers;u yii;u yii\db\query;u yii\web\controller;class testcontroller extends controller{ public function actiontest() { $data = (new query())->from('{{%ur}}') ->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->ur->id) ? yii::$app->ur->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来设置这个导出数量'expor西安大专学校排名tinterval' => 100,'levels' => ['error', 'warning'],//定义分类'categories' => ['db']广西公务员考试真题,],],],
有人会问yii2设置flushinterval和exportinterval的作用是什么,因为在一些系统中日志的操作会很频繁,如果频繁的读取文件或数据库来写日志,会造成严重的io消耗,降低系统性能,这也是yii2的一个优化吧。
当然有些时候一些长时间在控制台运行的程序,需要立即显示日志,那么可以通过如下配置:
'log' => ['tracelevel' => yii_debug ? 3 : 0,'flushinterval' => 1,'targets' => [['class' => 'yii\log\filetarget','levels' => ['error', 'warning'],],['class' => 'yii\log\filetarget','exportinterval' => 1,'levels' => ['error', 'warning'],//定义分类'categories' => ['db'],],],],
将flushinterval和exportinterval分别设为1。
有些时候我们需要人为的开启和关闭某些日志目标,这时就需要我们为每个日志目标设个键,以区分。
'log' => ['tracelevel' => yii_debug ? 3 : 0,'targets' => ['pay' => ['class' => 'yii\log\dbtarget','levels' => ['error', 'warning'],'categories' => ['pay'],],'db' => ['class' => 'yii\log\dbtarget','levels' => ['error', 'warning'],'categories' => ['db'],],],],
然后通过如下,进行开启和关闭:
//关闭yii::$app->log->targets['db']->enabled = fal;//开启yii::$app->log->targets['db']->enabled = true;
本文发布于:2023-04-08 19:40:04,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/d771009cdd8f7da6e1b9afeec2ca3d6a.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:YII2框架中日志的配置与使用方法实例分析.doc
本文 PDF 下载地址:YII2框架中日志的配置与使用方法实例分析.pdf
留言与评论(共有 0 条评论) |