您好,UncleToo欢迎您!  为了更好的浏览本站,请使用高版本浏览器
RSS  Tag     设为首页 | 加入收藏
 您所在的位置:首页 > PHP框架 > Yii Framework

Yii Framework的日志记录 和 异常处理

作者:  来源:互联网  日期:2013-11-26 13:42:17
收藏  评论:( 0 )  阅读:616

Yii Framework的日志记录 和 异常处理

一、日志记录
信息记录

信息可以通过 Yii::log 或 Yii::trace 记录。其 区别是后者只在当应用程序运行在 调试模式

Yii::log($message, $level, $category); 
Yii::trace($message, $category);

信息级别应该是下列值中的一种:
trace: 这是在 Yii::trace 中使用的级别。它用于在开发中 跟踪程序的执行流程。
info: 这个用于记录普通的信息。
profile: 这个是性能概述(profile)。
warning: 这个用于警告(warning)信息。
error: 这个用于致命错误(fatal error)信息。

信息路由
要使用信息路由,我们需要安装并预加载一个 CLogRouter 应用组件。我们也还需要配置它的 routes 属性为我们想要的那些日志路由。

array( 
    ...... 
    'preload'=>array('log'), 
    'components'=>array( 
        ...... 
        'log'=>array( 
            'class'=>'CLogRouter', 
            'routes'=>array( 
                array( 
                    'class'=>'CFileLogRoute', 
                    'levels'=>'trace, info', 
                    'categories'=>'system.*', 
                ), 
                array( 
                    'class'=>'CEmailLogRoute', 
                    'levels'=>'error, warning', 
                    'emails'=>'admin@example.com', 
                ), 
            ), 
        ), 
    ), 
)

Yii 中,有下列几种日志路由可用:
CDbLogRoute: 将信息保存到数据库的表中。
CEmailLogRoute: 发送信息到指定的 Email 地址。
CFileLogRoute: 保存信息到应用程序 runtime 目录中的一个文件中。
CWebLogRoute: 将 信息 显示在当前页面的底部。
CProfileLogRoute: 在页面的底部显示概述(profiling)信息。

信息过滤
正如我们所提到的,信息可以在他们被发送到一个日志路由之前通过它们的级别和分类过滤。 这是通过设置对应日志路由的 levels 和 categories 属性完成的。 多个级别或分类应使用逗号连接。
由于信息分类是类似 xxx.yyy.zzz 格式的,我们可以将其视为一个分类层级。 具体地,我们说 xxx 是 xxx.yyy 的父级,而xxx.yyy 又是 xxx.yyy.zzz 的父级。

二、错误处理
YII使用CErrorHandler组件处理错误.
引发异常
Yii定义了两个异常类:CException和CHttpException。前者是一个通用的异常类,而后者用于对最终用户显示异常信息。同时,后者有一个statusCode属性来代表HTTP状态码。

// 如果提交的ID是无效的 
throw new CHttpException(404,'此页面不存在');

显示错误
当一个错误被转发给组件CErrorHandler的时候,它会选择合适的视图来显示错误。
CErrorHandler会搜索合适的视图来显示错误信息,搜索的顺序如下:
WebRoot/themes/ThemeName/views/system: 在当前主题视图下的system目录中。
WebRoot/protected/views/system: 在应用的默认视图的system目录中。
yii/framework/views: 在Yii提供的标准视图目录中。
使用一个动作来处理错误
Yii也可以使用控制器 动作来处理错误显示

return array( 
    ...... 
    'components'=>array( 
        'errorHandler'=>array( 
            'errorAction'=>'site/error', 
        ), 
    ), 
);

我们配置了CErrorHandler::errorAction属性,属性值是一个路由site/error。这个路由指向SiteController中的error。
我们可以这样来编写error动作:

public function actionError() 
{ 
    if($error=Yii::app()->errorHandler->error) 
        $this->render('error', $error); 
}

在这个动作中,首先从CErrorHandler::error中取得详细的错误信息。如果取得的信息非空,就使用CErrorHandler::error返回的信息来渲染error视图。CErrorHandler::error返回的信息是一个数组,结构如下:
code: HTTP 状态码(比如 403, 500);
type: 错误类型(比如 CHttpException, PHP Error);
message: 错误信息;
file: 发生错误的PHP文件名;
line: 错误所在的行;
trace: 错误的调用栈信息;
source: 发生错误的代码的上下文。



除非特别声明,本站所有PHP教程及其他教程/文章均为原创、翻译或网友投稿,版权均归UncleToo中文网所有, 转载请注明作者及出处。
原文网址:http://www.uncletoo.com/html/yii/701.html
读完这篇文章后,你是否有所收获? 分享是一种生活的信念!
  • 0
  • 0
我来说两句
更多>>网友评论