本文章地址:https://wutong.me/2015/09/03/yii-log.html 转载请注明出处

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:

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回调包含了应用程序的代码跟踪)
]