yii日志工作原理及测试

发表于:2017-11-02 18:57 阅读:

yii日志信息可以依据等级和类型被分类,通过使用等级和类型过滤器,日志信息可以被路由至不同的目的地,如写入文件,发送至管理员信箱,或显示在浏览器窗口。每次请求的时候应用程序都会记录大量信息。yii应用程序默认被配置成调试模式,在该模式下,框架自动记录系统级调试信息。默认状态下日志信息被保存在内存中,因此它们的生存周期与请求相同。
 
小测试:
根目录的index.php文件中的如下代码决定了应用程序是否处于调试模式:
defined('YII_DEBUG') or define('YII_DEBUG',true);
 
让我们在 SiteController 类添加一个小 action 来看看被记录的内容:
public function actionShowLog()
{
echo "Logged Messages:
";
var_dump(Yii::getLogger()->getLogs());
}
访问 http://localhost/trackstar/site/showLog 查看日志信息
(提示:如果我们注释掉index.php中定义的全局变量并刷新页面,我们将看不到日志内容,这是因为系统级调试信息是通过Yii::trace 来创建的,只有当应用程序处于调试模式下才会记录该信息)
 
 
通过两种方法记录日志信息:
Yii::log($message, $level, $category)
Yii::trace($message, $category)
(提示:两者的区别就是Yii::trace只在调试模式下记录信息)
 
 
类型和等级:
当记录一个信息时,我们需要指定它的类型和等级。类型是格式为 xxx.yyy.zzz 的类似路径代理的字符串,例如,如果在 SiteController 类中记录一条信息,可以使用 application.controllers.SiteController 作为类型。当使用 Yii::log 记录信息时可以同时指定一个等级。虽然你可以自定义等级,但是一般我们使用以下几种:
Trace:一般被用来记录应用程序工作流
Info: 日志的大概内容,也是未指定下的默认等级
Profile:描述性能方面的功能
Warning:警告信息
Error:错误信息
 
 
实例:在 SiteController::actionLogin() 登录方法中添加几个日志信息:
1.在方法开头添加一个调试信息以标识该方法正在被执行:
Yii::trace("The actionLogin() method is being requested", "application.controllers.SiteController");
 
2.在成功登录时添加一个 info 信息:
Yii::log("Successful login of user: ".Yii::app()->user->id, "info", "application.controllers.SiteController");
 
3.在登录失败时添加一个 warning 信息:
Yii::log("Failed login attempt", "warning", "application.controllers.SiteController");
 
 
消息路由:
默认情况下,Yii::log和Yii::trace方法 将日志信息存储在内存中,我们应该将它们存储到一些持久化介质中。消息路由功能允许将日志信息路由至不同的目的地。在Yii中消息路由是由 CLogRouter 应用程序组件管理的,它允许你定义一系列消息目的地。
 
配置 CLogRouter 应用程序组件,在 protected/config/main.php 中设置如下:
'log'=>array(
'class'=>'CLogRouter',
'routes'=>array(
array(
'class'=>'CFileLogRoute',
'levels'=>'error',
),
array(
'class'=>'CFileLogRoute',
'levels'=>'trace, info',
'logFile'=>'infoMessages.log',
),
array(
'class'=>'CWebLogRoute',
'levels'=>'warning',
),
),
)
 
*使用 CFileLogRoute 时,日志消息默认被保存到 runtime 目录下的 application.log 文件中。也可自己指定保存消息的文件(如在上面的配置中,我们将trace和info级别的消息保存到了一个infoMessages.log文件中)。
 
可选择的消息路由列表包括:
CDbLogRoute: 将消息存储到数据库表中
CEmailLogRoute: 将消息发送至特定的email地址
CFileLogRoute: 将消息保存至应用程序 runtime 文件夹下的一个文件中
CWebLogRoute: 在当前页面的结尾显示消息
CProfileLogRoute: 在当前页面结尾显示 profiling 消息


灵石网络专注于营销型网站设计、SEO搜索引擎优化、PHP开发、企业网络营销服务。


扫描二维码加我微信!