Yii 日志组件
详细的介绍查看官网的document:http://www.yiiframework.com/doc/guide/1.1/en/topics.logging
也可以看 Yii 1.1 Application Development Cookbook 这本书很好
默认的日志是输出到protected/runtime/application.log
如果需要修改那么需要在main.php里面增加log配置,如下:
'components' => array(
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'trace, info, debug, warn, error, fatal, profile',
'categories'=>'test.*',
'maxFileSize'=>1048576,
'logFile'=>'test.log',
),
//
// 开发过程中所有日志直接输出到浏览器了,这样不需要登录服务器看日志了
array(
'class' => 'CWebLogRoute',
'categories' => 'test.*',
'levels' => CLogger::LEVEL_PROFILE,
'showInFireBug' => true,
'ignoreAjaxInFireBug' => true,
),
array(
'class' => 'CWebLogRoute',
'categories' => 'test.* ',
),
array(
'class'=>'CEmailLogRoute',
'levels'=>'error, warning',
'emails'=>'admin@example.com',
),
),
),
),
如果在某处调用了Yii::log("jdkshgds","info",'test.xx');
这个log首先被记录在了内存中一个CLogger类的array中,然后会逐一的判断每个LogRoute,判断是否需要输出,注意是逐一判断,不是其中一个输出下一个就不管了。
拿上面的配置来说:
第一个CFileLogRoute,'categories'=>'test.*',levels里包含了info, test.xx满足条件,所以会执行,将这条log输出到test.log中。
YII中日志的基本使用:
可以通过YII提供的Yii::log和Yii::trace进行日志信息的输出
函数定义
- public static function trace($msg,$category='application')
- {
- if(YII_DEBUG)
- self::log($msg,CLogger::LEVEL_TRACE,$category);
- }
- public static function log($msg,$level=CLogger::LEVEL_INFO,$category='application')
- {
- if(self::$_logger===null)
- self::$_logger=new CLogger;
- if(YII_DEBUG && YII_TRACE_LEVEL>0 && $level!==CLogger::LEVEL_PROFILE)
- {
- $traces=debug_backtrace();
- $count=0;
- foreach($traces as $trace)
- {
- if(isset($trace['file'],$trace['line']) && strpos($trace['file'],YII_PATH)!==0)
- {
- $msg.="\nin ".$trace['file'].' ('.$trace['line'].')';
- if(++$count>=YII_TRACE_LEVEL)
- break;
- }
- }
- }
- self::$_logger->log($msg,$level,$category);
- }
日志信息的级别:
- const LEVEL_TRACE='trace';用于调试环境,追踪程序执行流程
- const LEVEL_WARNING='warning';警告信息
- const LEVEL_ERROR='error';致命错误信息
- const LEVEL_INFO='info';普通提示信息
- const LEVEL_PROFILE='profile';性能调试信息
使用方法:
Yii::log($message, $level, $category);
Yii::trace($message, $category);
示例:
需先在main.php中进行配置,例子选择将日志存储在文件(系统默认为webapp\protected\runtime\application.log)中,为只存储trace和error级别,过滤以orange开始的log。
- 'components'=>array(
- ...............
- 'log'=>array(
- 'class'=>'CLogRouter',
- 'routes'=>array(
- array(
- 'class'=>'CFileLogRoute',
- 'levels'=>'trace,error',
- 'categories'=>'orange.*'
- ),
- ),
- ),
- ...............
- )
在控制器中定义方法并执行,在此为OrangeController控制器
- public function actionTest(){
- Yii::log('This is a trace log','trace','orange.test');
- }
执行以后可在日志文件中看到我们的trace信息,为
- 2012/09/28 15:40:11 [trace] [orange.test] This is a trace log
- in D:\PHP\www\yii\orange\protected\controllers\OrangeController.php (24)