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代码
![](http://orangeholic.iteye.com/images/icon_star.png)
'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)
也可以看 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代码
![](http://orangeholic.iteye.com/images/icon_star.png)
'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)
相关文章推荐
- Yii 不完全解决方案(一)
- vsftpd 出现553 Could not create file 解决方法
- yii 使用小技巧
- (转)PHP的ereg()与eregi()的不同及相同点。对比
- PHP时间戳的转换
- PHP:冒泡排序法
- 推荐一个PHP的MySQL数据库备份还原类
- PHP编码风格(转)
- 解决互斥锁lock,报tpp.c:63: __pthread_tpp_change_priority: Assertion异常
- 为何在PHP中的cookie值读取失败?
- Windows 7或者 server 小技巧 添加 IIS和FTP 组件功能
- Windows 7或者 server 小技巧 添加 IIS和FTP 组件功能
- PB Post到PHP接口时无法从_POST数组取值
- 【只需3步】Linux php的安装与配置[源码安装]
- PHP数组操作类实例
- php实现源代码加密的方法
- php实现模拟post请求用法实例
- PHP中文字符串截取类
- 《PHP扩展学习系列》系列技术文章整理收藏
- 设置IIS下PHP环境的DOCUMENT_ROOT