首页 > 开发 > PHP > 正文

详解PHP的Yii框架中日志的相关配置及使用

2024-05-04 22:33:49
字体:
来源:转载
供稿:网友

默认的日志是输出到protected/runtime/application.log

如果需要修改那么需要在main.php里面的 components 下面增加log配置,如下:

'preload' => array('log'),//这句也必须加上'components' => array(     'log'=>array(       'class'=>'CLogRouter',       'routes'=>array(        //这是一个文件route表示category为test开头的所有类型的输出都会记录到runtime/test.log下面          array(            'class'=>'CFileLogRoute',            'levels'=>'trace, info, debug, warn, error, fatal, profile',            'categories'=>'test.*',            'maxFileSize'=>1048576,//单文件最大1G            '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中,然后下一个CWebLogRoute, 'levels' => CLogger::LEVEL_PROFILE,。而这条log是info的,所以不会执行,再下一个CWebLogRoute,'categories' => 'test.* ',levels没指定,那就说不过滤,所以这个也会被执行,所以这条log将被输出到浏览器中。

二、profile功能
另外logger还有一个很强大的功能:profile,

Yii::beginProfile('blockID');...code block being profiled...Yii::endProfile('blockID');

这样就能测试这个code block的执行效率了,非常的方便啊。

更详细的配置查看:http://www.yiiframework.com/doc/api/1.1/CProfileLogRoute

然后还有一个很BUG的功能,Profiling SQL Executions

很多时候sql语句写的不好会非常影响效率的,但是要确定哪一条语句影响了效率就需要profiling了。YII也提供了这个bug级别的功能。

三、Yii::log()和Yii::trace()的使用
首先在config文件中设置log

'log'=>array(  'class'=>'CLogRouter',  'routes'=>array(    array(      'class'=>'CFileLogRoute',//这表示把日志输出到文件中,下方有详细的      'levels'=>'error, warning',    ),    array(      'class'=>'CWebLogRoute',//这表示把日志显示在网页下方,下方有详细的      'levels'=>'trace, info, error, warning',      'categories'=>'cool.*,system.db.*',    ),  ),),            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表