Yii中的日志是比较一个强大的功能。
配置
使用日志需要在components中配置
//配置
$config = [
//组件配置
'components' => [
//日志
'log' => [
'flushInterval'=>500,
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
//记录数据库相关操作的日志并保存到数据库中
[
'class' => 'yii\log\DbTarget',
'levels' => ['error', 'warning','info'],
'logTable'=>'log',
'categories'=>['yiidb*']
],
],
]
]
];
其中的 log 是 yii\log\Dispatcher的实例,所以如果想获得log记录的信息,需要使用下面的代码
Yii::$app->getLog()->getLogger()->messages
targets表示记录的日志信息要发送到哪些载体中,如果是yii\log\FileTarget,就保存到文件中(默认是runtime\logs目录下);如果是yii\log\DbTarget,就保存到数据表中,主要有以下的target:
- yii\debug\LogTarget
- yii\log\DbTarget
- yii\log\EmailTarget
- yii\log\FileTarget
- yii\log\SyslogTarget
- yii\mongodb\log\MongoDbTarget
flushInterval表示当内存中的日志信息达到多少条的时候进行刷新,刷新的意思就是把日志信息根据target的不同写入到不同的载体中,如文件、数据库
日志类别
日志的类别完全是自定义的,需要在yiilogTarget派生的子类中配置,配置属性为:categories ,这是一个数组,其中每个元素跟命名空间差不多,如果想记录db相关下的所有的日志则可以填写 ‘yiidb*‘,如:
[
'class' => 'yii\log\DbTarget',
'levels' => ['error', 'warning','info'],
'logTable'=>'log',
'categories'=>['yii\db*']
],
日志级别
分为以下几种:
常量 | 值 | 描述 | 定义位置 |
---|---|---|---|
LEVEL_ERROR | 1 | 错误信息。错误信息是一个指示异常终止的应用程序,并可能需要开发人员进行处理。 | yii\log\Logger |
LEVEL_INFO | 4 | 参考信息。一些无关紧要的,需要开发人员审查。 | yii\log\Logger |
LEVEL_PROFILE | 64 | 剖析消息。这表明该消息是用于分析目的。 | yii\log\Logger |
LEVEL_PROFILE_BEGIN | 80 | 剖析消息。这表明该消息是用于分析目的。标明分析块的开始 | yii\log\Logger |
LEVEL_PROFILE_END | 96 | 剖析消息。这表明该消息是用于分析目的。标明分析块的结束 | yii\log\Logger |
LEVEL_TRACE | 8 | 跟踪消息。揭示了代码被执行。 | yii\log\Logger |
LEVEL_WARNING | 2 | 警告消息。警告消息是指示一些异常情况,但应用程序能够继续运行。开发人员应该注意这条消息。 | yii\log\Logger |
日志格式
假如通过Yii::$app->log->getLoger()->messages输出了下列的日志信息
array (size=5)
0 => string 'Bootstrap with yiidebugModule::bootstrap()' (length=44)
1 => int 8
2 => string 'yiibaseApplication::bootstrap' (length=31)
3 => float 1441289991.0516
4 =>
array (size=0)
解释如下
[
[0] => 消息 (复合类型, 可能是字符串也可能是其他类型数据或者是异常对象)
[1] => 等级 (整型)
[2] => 类别 (字符型)
[3] => 记录时间 (浮点型, obtained by microtime(true))
[4] => 跟踪 (数组, debug回调,包含了应用程序的代码跟踪)
]