调试 PHP 代码时,我们最常用的就是手动输出然后 exit,这种方法简单快捷。但是也有局限性,比如在写 API 或者跑脚本的时候。这个时候,我们就需要查看错误 Log,在一堆 Log 中找到对应的位置。这个时候,我们就需要开启数据库日志(可以生成错误日志,发送错误日志邮件,错误信息存入数据库,三者可以同时进行)。
对于 Log,有文件的 Log,数据库的 Log,每次使用需要打开 Log,这个比较麻烦,对于持续的输出,我们需要使用 Linux 命令 tail -f xxx.log 来查看持续的 Log。
使用 DB Log,把 Log 存储到表中,我们可以在后台开启一个 Log 查看过滤的功能,每次执行,直接在后台查看,方便快捷,下面讲述如果在 Yii2 中开启 DB Log。
'log' => [ 'targets' => [ [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning'], 'categories' => ['yii\*'], ], [ 'class' => 'yii\log\FileTarget', 'levels' => ['error', 'warning','info'], 'logFile' =>'@runtime/logs/chengcheng.log', 'exportInterval' => 1, 'categories'=>['chengcheng'], 'logVars' => [], ], [ 'class' => 'yii\log\DbTarget', 'levels' => ['error', 'warning'], 'logTable' => 'system_log', ], [ 'class' => 'yii\log\EmailTarget', 'levels' => ['error', 'warning'], 'message' => [ 'to' => ['chengcheng@yidian-mall.com'], 'subject' => 'Yidian Mall', ], ], ], ],
php yii migrate --migrationPath=@yii/log/migrations
注意安装目录,Yii 高级版在根目录下运行。
这里的 'chengcheng' 和配置文件中 'categories' 下的名称要一致的。
注:如果邮件报错,你需要添加邮箱配置:
'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'useFileTransport' =>false,//这句一定有,false发送邮件,true只是生成邮件在runtime文件夹下,不发邮件 'transport' => [ 'class' => 'Swift_SmtpTransport', 'host' => 'smtp.exmail.qq.com', //每种邮箱的host配置不一样 'username' => 'xxxxx', 'password' => 'xxxxx', 'port' => 'xxx', // 'encryption' => 'tls', ], 'messageConfig'=>[ 'charset'=>'UTF-8', 'from'=>['admin@yidian-mall.com'=>'Yidian Mall'] ], ],
上面的邮箱 username,password,port 自行配置。
通过以上方法,当你遇到了错误信息,便会记录日志文件,发送错误邮箱 和 存入数据库了。