您的位置:首页 > 编程语言 > PHP开发

17. Yii 2.0 log组件

2017-09-07 14:51 288 查看
log组件主要用于记录程序运行过程中产生的异常(或错误)或 操作日志。

这里以 Yii 2.0 基础版为例,高级版类似。
Yii 封装的日志类文件位于 /vendor/yiisoft/yii2/log 目录下。
log组件支持的日志介质主要有 DbTarget.php、FileTarget.php、EmailTarget.php和SyslogTarget.php。
这里我们主要介绍前三种,即数据库日志、文件日志和邮件日志。

记录日志的级别,主要有以下几种:

self::LEVEL_ERROR => 'error',      // 不可恢复的异常信息
self::LEVEL_WARNING => 'warning',   // 程序运行时的警告信息
self::LEVEL_INFO => 'info',    // 程序运行时的信息,如:管理员操作
self::LEVEL_TRACE => 'trace',    // 调试信息,需要开启 YII_DEBUG 调试模式
self::LEVEL_PROFILE_BEGIN => 'profile begin',
self::LEVEL_PROFILE_END => 'profile end',

1. 文件日志
文件日志的默认保存位置为 /basic/runtime/logs

首先,查看web配置文件 /basic/config/web.php 中的组件配置,可看到日志组件的默认配置如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
'log' => [    'traceLevel' => YII_DEBUG ? 3 : 0, // trace级别    'targets' => [        [        'class' => 'yii\log\FileTarget', // 默认采用文件日志        'levels' => ['error', 'warning'], // 记录日志的级别,记录异常和警告        ],    ],],


 来自CODE的代码片
snippet_file_0.php

其次,在控制器层添加一个控制器文件 LogController.php,进行测试,代码如下:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
<?php
namespace app\controllers;
use yii\web\Controller;
class LogController extends Controller {
/** * 测试主动记录日志 */ public function actionTest() { // 这里是人为的调用方法来记录日志,其实当程序运行中出现异常时,会自动记录error日志。
\Yii::warning('这是一个警告'); // 记录日志的各个方法都没有返回值 \Yii::error('这是一个错误', 'app'); // 第二个参数可以指定 category 分类,默认值为 application \Yii::info ( '修改密码', 'operation' ); // 如果想记录info级别的日志,log组件的日志级别需要包含info才行 \Yii::trace('这是一个trace信息'); }
}


 来自CODE的代码片
snippet_file_0.php

最后,在浏览器中访问 http://basic.com/log/test,就可以看到 /basic/runtime/logs 中的日志文件了。

2. 数据库日志
首先,需要按照 /basic/vendor/yiisoft/yii2/log/migrations/schema-mysql.sql 文件中给出的sql语句,在数据库中创建一个 log 数据表(如果需要表前缀,请自行加上)。

其次,修改web配置文件 /basic/config/web.php 中的组件配置中的log组件,将 'class' => 'yii\log\FileTarget'
改为 'class' => 'yii\log\DbTarget' 即可。

最后,在浏览器中访问 http://basic.com/log/test,就可以在
数据表 log 中看到对应的日志记录了。

3.
邮件日志
使用邮件日志介质,除了要修改log组件外,还必须配置mailer组件。配置方法可参考下面的部分代码。

4. Dispatcher调度器的使用
Dispatcher调度器,又称分配器,利用它的日志组件配置格式,可以将不同级别的日志分配给不同的日志介质来处理,也可以将同一级别的日志分配给多个日志介质处理。

Dispatcher调度器的类文件为/basic/vendor/yiisoft/yii2/log/Dispatcher.php

首先,修改web配置文件 /basic/config/web.php
中的组件配置中的log组件的配置,代码如下:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
22
23
24
25
26
27
28
29
30
31
32
33
'log' => [         'targets' => [                 'file' => [ // 只匹配日志级别levels                        'class' => 'yii\log\FileTarget',                        'levels' => [                                     'trace',                                'warning'                         ],                ],                'db' => [ // 同时匹配日志级别levels和分类categories                        'class' => 'yii\log\DbTarget',                        'levels' => [                                 'info'                         ],                        'categories' => [                                 'yii\*' ,                                'operation'                        ]                 ],                'email' => [                         'class' => 'yii\log\EmailTarget',                        'levels' => [                                 'error',                                'warning'                         ],                        'message' => [                                 'from'=>'junjie.3533@163.com',  // 发件人,可采用数组格式                                'to'  => '******@qq.com', // 收件人,可采用数组格式,发送到多个邮箱                                'subject' => 'Yii 2.0 Log', // 邮件主题                        ]                 ]         ] ],


 来自CODE的代码片
snippet_file_0.txt

其次,由于我们使用了邮件日志介质,故我们还必须修改组件配置中的mailer组件的配置,代码如下:

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
'mailer' => [         'class' => 'yii\swiftmailer\Mailer',        'useFileTransport' => false,    // 是否只将邮件日志保存为文件,false表示否,即将邮件日志发送出去        'transport' => [                 'class' => 'Swift_SmtpTransport',                'host' => 'smtp.163.com', // 邮件服务器地址,邮箱账号需开通对应的服务(如:smtp服务)                'username' => 'junjie.3533', // 邮箱账号                'password' => '******', // 邮箱密码,如果开启了授权码登录第三方邮件客户端,则用授权码                'port' => '25', // 端口                'encryption' => 'tls'         ] ],


 来自CODE的代码片
snippet_file_0.php

最后,在浏览器中访问 http://basic.com/log/test ,测试对应的效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: