• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

YII2框架中日志的配置与使用方法实例分析

php 搞代码 4年前 (2022-01-01) 16次浏览 已收录 0个评论

这篇文章主要介绍了YII2框架中日志的配置与使用方法,结合实例形式分析了YII2框架中日志的功能、配置方法及使用相关操作技巧,需要的朋友可以参考下

本文实例讲述了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' => [ 'traceLevel' => YII_DEBUG ? 3 : 0, 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], ], [ //日志处理器类,这里我改用数据库存日志了 'class' => 'yii\log\DbTarget', //日志记录的级别,这里演示设为info 'levels' => ['info'], //定义分类 'categories' => ['yii\db\*'], ], ], ], 

然后我们操作一下数据库,看是否日志记录了。

 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'], ], ], ], 

有人会问YII2设置flushInterval和exportInterval的作用是什么,因为在一些系统中日志的操作会很频繁,如果频繁的读取文件来源gao@dai!ma.com搞$代^码网或数据库来写日志,会造成严重的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 = false; //开启 Yii::$app->log->targets['db']->enabled = true; 

更多关于Yii相关内容感兴趣的读者可查看本站专题:《》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

以上就是YII2框架中日志的配置与使用方法实例分析的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:YII2框架中日志的配置与使用方法实例分析

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址