YII2日志组件怎样配置和使用,操作是怎样的
导读:这篇文章给大家介绍了“YII2日志组件怎样配置和使用,操作是怎样的”的相关知识,讲解详细,步骤过程清晰,对大家进一步学习和理解“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\*'],
],
],
],
然后我们操作一下数据库,看是否日志记录了。
?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'],
],
],
],
有人会问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 = false;
//开启
Yii::$app->
log->
targets['db']->
enabled = true;
以上就是关于YII2日志组件怎样配置和使用,操作是怎样的的介绍,本文内容仅供参考,有需要的朋友可以借鉴了解看看,希望对大家学习或工作,想要了解更多欢迎关注网络,小编每天都会为大家更新不同的知识。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: YII2日志组件怎样配置和使用,操作是怎样的
本文地址: https://pptw.com/jishu/650379.html
