yii跟踪调试:Yii::log() Yii::trace()使用方法


第一步:首先在主配置文件config.php文件中设置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.*', //这个最好设置
  ),
  ),
  ),

日志路由class:

  • CDbLogRoute: 将信息保存到数据库的表中。
  • CEmailLogRoute: 发送信息到指定的 Email 地址。
  • CFileLogRoute: 保存信息到应用程序 runtime 目录中的一个文件中。
  • CWebLogRoute: 将 信息 显示在当前页面的底部。
  • CProfileLogRoute: 在页面的底部显示概述(profiling)信息。

分类categories:
可以自定义,但在输出函数里要对应才会被写入日志里
(例如上边写的是 cool.* 和 system.db.* ,就会把相应分类的信息写入日志,请结合下文来理解)

设置完了,就可以用写入日志的函数来记录了:
Yii::trace('My log message.','cool.pd');
//cool.pd属于cool.*分类,所以会被写入日志
Yii::log('My log message.','info','cool.collectpd');
//log定义级别为info,结合上文,第一个logclass会忽略,不会被写入文件,但会被第二个logclass接收,写入日志在网络下方显示。

trace()和log()的区别:
trace()只会在调试模式下生效,即开启debug的时候
trace()不分level,但log()能设置levels参数

 

自己使用的心得:

1.如果要用Yii::trace()的话,就必须在config.php文件的levels中加入‘trace’级别。此种方式则必须要求在入口文件中定义如下:

---->defined('YII_DEBUG') or define('YII_DEBUG', true);// 此句主要是将debug模式打开,开此种方式将会在application.log文件中打印出大量系统的trace信息。这样势必造成系统运行效率低下 了。如果只想打印出自定义的trace信息,则需要将此句屏蔽掉,而改用Yii::log()方法。

比如定义categories字段为‘xyz.*’,那么使用方法如下:

---->Yii::trace('log message...','xyz.data');//这个跟log的区别在于不需要定义trace级别,注意如果将YII_DEBUG关闭了,则无法打印出此句信息。

2.如果用Yii::log()的话,就最好定义categories字段,并且定义一个自己独有的信息,比如“xyz.*”,然后在用的时候必须如此写法:

----> Yii::log('log message...','info','xyz.data');//这里的info表示trace级别,最后一个参数的‘xyz’必须是在categories中定义的,点后接的可以随便写点什么,只是为了表示它是在xyz下的。

Archives