调试程序的时候,我们可以加入exit断点进行输出的方式调试程序,这种方式比较的简单快捷,但是有局限性 ,譬如API接口传递数据,如果出现数据没有传递的情况,我们需要查看log,有时候我们想要查看很多的中间值,这样,我们在yii2开发的过程中,就需要用到log。
对于log,有文件的log,文件的log,每次使用需要打开log,这个比较麻烦,对于持续的输出,我们需要使用linux命令tail -f xxx.log 来查看持续的log.
使用db log,吧log存储到表中,我们可以在后台开启一个log查看过滤的功能,每次执行,直接在后台查看,方便快捷,下面讲述如果在yii2中开启db log
1.加入log组件的配置:
'log' =>[ # 追踪级别 # 消息跟踪级别 # 在开发的时候,通常希望看到每个日志消息来自哪里。这个是能够被实现的,通过配置 log 组件的 yii\log\Dispatcher::traceLevel 属性, 就像下面这样: 'traceLevel' => YII_DEBUG ? 3 : 0, # 通过 yii\log\Logger 对象,日志消息被保存在一个数组里。为了这个数组的内存消耗, 当数组积累了一定数量的日志消息,日志对象每次都将刷新被记录的消息到 log targets 中。 你可以通过配置 log 组件的 yii\log\Dispatcher::flushInterval 属性来自定义数量 'flushInterval' => 1, 'targets' => [ 'db' =>[ //'levels' => ['warning'], 'categories' => ['appadmin'], #'class' => 'yii\log\FileTarget', 'class' => 'yii\log\DbTarget', # 当 yii\log\Logger 对象刷新日志消息到 log targets 的时候,它们并 不能立即获取导出的消息。相反,消息导出仅仅在一个日志目标累积了一定数量的过滤消息的时候才会发生。你可以通过配置 个别的 log targets 的 yii\log\Target::exportInterval 属性来 自定义这个数量,就像下面这样: 'exportInterval' => 1, # 输出文件 //'logFile' => '@app/runtime/logs/appadmin.log', 'logTable' => '{{%system_log}}', # 你可以通过配置 yii\log\Target::prefix 的属性来自定义格式,这个属性是一个PHP可调用体返回的自定义消息前缀 //'prefix' => function ($message) { // return $message; //}, # 除了消息前缀以外,日志目标也可以追加一些上下文信息到每组日志消息中。 默认情况下,这些全局的PHP变量的值被包含在:$_GET, $_POST, $_FILES, $_COOKIE,$_SESSION 和 $_SERVER 中。 你可以通过配置 yii\log\Target::logVars 属性适应这个行为,这个属性是你想要通过日志目标包含的全局变量名称。 举个例子,下面的日志目标配置指明了只有 $_SERVER 变量的值将被追加到日志消息中。 # 你可以将 logVars 配置成一个空数组来完全禁止上下文信息包含。或者假如你想要实现你自己提供上下文信息的方式, 你可以重写 yii\log\Target::getContextMessage() 方法。 'logVars' => [], ], /* 'file' =>[ 'levels' => ['trace'], 'categories' => ['mylog'], 'class' => 'yii\log\FileTarget', # 当 yii\log\Logger 对象刷新日志消息到 log targets 的时候,它们并 不能立即获取导出的消息。相反,消息导出仅仅在一个日志目标累积了一定数量的过滤消息的时候才会发生。你可以通过配置 个别的 log targets 的 yii\log\Target::exportInterval 属性来 自定义这个数量,就像下面这样: 'exportInterval' => 1, # 输出文件 'logFile' => '@app/runtime/logs/my.log', # 你可以通过配置 yii\log\Target::prefix 的属性来自定义格式,这个属性是一个PHP可调用体返回的自定义消息前缀 'prefix' => function ($message) { return $message; }, # 除了消息前缀以外,日志目标也可以追加一些上下文信息到每组日志消息中。 默认情况下,这些全局的PHP变量的值被包含在:$_GET, $_POST, $_FILES, $_COOKIE,$_SESSION 和 $_SERVER 中。 你可以通过配置 yii\log\Target::logVars 属性适应这个行为,这个属性是你想要通过日志目标包含的全局变量名称。 举个例子,下面的日志目标配置指明了只有 $_SERVER 变量的值将被追加到日志消息中。 # 你可以将 logVars 配置成一个空数组来完全禁止上下文信息包含。或者假如你想要实现你自己提供上下文信息的方式, 你可以重写 yii\log\Target::getContextMessage() 方法。 'logVars' => [], ], */ ], ],
对于上面的配置,我们需要看的是targets中的配置,上面配置了两个log,一个是db,一个是file。
他们的共同处:
1.1categories,代表log的类别,类别是为了在使用log的时候进行写入不同的log文件,譬如,我们定义了categories为appadmin,按照下面的方式调用log,会把log 输出到当前的配置
\Yii::info('111111111','appadmin');
1.2.输出:
File Log 配置的是 logFile,log信息写入到配置的这个文件中,这个文件要设置可写
Db Log 配置的是 logTable,这里填写对应的表名
2. 输出
对于文件输出,我们需要新建这个文件,并设置文件为可写
对于db log,我们需要建立表。
上面的配置,需要加入到console config 或者common config中,因为只有加入了配置,console(控制台)主体执行migration脚本,才能找到配置
执行migration脚本:
./yii migrate --migrationPath=@yii/log/migrations/
执行完成后,MySQL中会出来一个system_log的表。
3.使用log
\Yii::info('111111111','appadmin');
其中1111111代表输出的log信息
appadmin代表上面配置的类别 categories。
4. 在后台建立表的查看功能,这样就可以通过后台查看log,当然也可以用phpmyadmin查看具体的log,就是有点费劲
上面完成了db log 和 file log的配置。