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

Yii 日志组件

2015-07-11 11:00 716 查看
详细的介绍查看官网的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进行日志信息的输出

函数定义

[php] view plaincopy

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);

}

日志信息的级别:

[php] view plaincopy

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。

Java代码


'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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: