工欲善其事,必先利其器。写代码前一定要先了解怎样方便调试。
目的是希望在开发环境下,记录更多的log信息,和环境有关,和前后台无关。于是直接编辑yii2\environments\dev\common\config\main-local.php,在components中加入如下代码:
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning', 'info', 'trace'],
],
],
],
init,dev,搞定。不过这样有个问题,打印$config全局变量时发现,\common\config\main-local.php和\frontend\config\main.php里面同时定义了log这块,也就是数组叠加了,保留一个就可以了。
然后到frontend\runtime\logs里面可以看到log的信息。
记录trace可以这样:
Yii::trace('能看到信息和方法名,以及文件行数', __METHOD__);
记录的levels,可以有如下选择:
trace: 这是在 Yii::trace 中使用的级别。它用于在开发中跟踪程序的执行流程。
info: 这个用于记录普通的信息。
profile: 这个是性能概述(profile)。
warning: 这个用于警告(warning)信息。
error: 这个用于致命错误(fatal error)信息。
记录的class,可以有如下选择:
yii\log\DbTarget: 发送到数据库。
yii\log\EmailTarget: 发送到指定的邮箱地址。
yii\log\FileTarget: 发送到文件。
yii\log\SyslogTarget: 发送到系统消息。
下面是一个配置email相关的例子:
'components' => [
'log' => [
'targets' => [
[
'class' => 'yii\log\DbTarget',
'levels' => ['error', 'warning'],
],
[
'class' => 'yii\log\EmailTarget',
'levels' => ['error'],
'categories' => ['yii\db\*'],
'message' => [
'from' => ['log@example.com'],
'to' => ['admin@example.com', 'developer@example.com'],
'subject' => 'Database errors at example.com',
],
],
],
],
],
如果在生产环境,如果想每天记录一个log文件,可以考虑直接修改vendor\yiisoft\yii2\log\FileTarget.php中的init(),里面有log文件地址。或者直接在levels下面再加上logFile定义。