• Yii1打印当前请求所有执行的SQL及耗时


    我们在熟悉新的项目了解业务的时候,可以有很多方式。看项目文档说明;和了解项目身边的人沟通;通过自己度代码调试,但是一步步调试打印语句或许有点慢,如果可以调出当前请求的所有语句,那么很快可以熟悉他的业务。再或者自己开发中排查问题。

    公司所用的框架是yii,由于项目比较早了,好像是13年开始的,所以我的测试版本是yii1,我所尝试的调试也是直接搜了很多帖子,在项目中实践可用,应该是兼容1和2版本的。

    [第一种]

    ①修改 index.php 开启调试模式

    //index.php
    //开启调试模式
    defined('YII_DEBUG') or define('YII_DEBUG',true);
    //设置日志记录级别,YII_TRACE_LEVEL的数字越大,信息越清楚
    defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);

    ②修改配置文件 main.php

    默认的日志是输出到protected/runtime/application.log
    如果需要修改那么需要在main.php里面的components下面增加log配置,如下:

    'preload' => array('log'),//这句也必须加上

    在 Yii 中,有下列几种日志路由可用:

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

    注:信息路由发生在当前请求周期最后的 onEndRequest 事件触发时。 要显式终止当前请求过程,请调用 CApplication::end() 而不是使用 die() 或 exit(),因为 CApplication::end() 将会触发 onEndRequest 事件, 这样信息才会被顺利地记录。

    'log'=>array(
                'class'=>'CLogRouter',
                'routes'=>array (
                    //log error
                    array (
                        'class'=>'FileDailyLogRoute',
                        'levels'=>'error, warning',
                        'logFile'=>'api_php_error.log',
                        'keepDays'=>7,
                        'logPath'=>'/data/logs/api',
                    ),
    //下面两个数组是我自己的配置,上面是公司项目自带的,不必例会

              //请求后在浏览器展示
    // array ( // 'class' => 'CWebLogRoute', // 'showInFireBug' => true, // 'ignoreAjaxInFireBug' => true, // 'levels' => 'trace', //级别为trace // 'categories' => 'system.db.*' // //只显示关于数据库信息,包括数据库连接,数据库执行语句 // ), array ( 'class' => 'CProfileLogRoute', 'levels' => 'trace', 'showInFireBug' => true, 'ignoreAjaxInFireBug' => true, 'categories' => 'system.db.* ' ) ) ),

    配置好之后,刷新请求页面就可以了,我这里调试的是api接口,所以看着比较不舒服,没试过web页面打印效果会不会美观些。

    我所在公司的二级配置地址是  protected/config/config.api.edaijia.cc            api

    'log'=>array(
            'class'=>'CLogRouter',
            'routes'=>array(
                array(
                    'class'=>'CFileLogRoute',
                    'levels'=>'error, warning',
                ),
                               array(
                                        'class'=>'CWebLogRoute', //在页面下方输出 主要使用此日志类
                                        'categories'=>'system.db.*',//日志分类
                                        
                                   ),
                 
            ),
        ),

    [第二种]

     在yii框架的libs目录下,找到/libs/framework/db/CDbCommand.php文件

    然后找到两个方法,queryInternal和execute方法​​,编辑方法,echo 出sql语句。

    这里编辑queryInternal方法524行。

     echo '<pre>';
                echo $this->getText().$par;
                print_r($this->_paramLog);

     

     

     

     

     

  • 相关阅读:
    实例模拟struts核心流程
    不同语言下的日期格式化大全
    Android基础之响应Menu键弹出菜单Demo
    c++复习基础要点02 虚函数与模板 与static inline是否共存
    Android listView scroll 恢复滚动位置
    centos本地源搭建——iso
    easy_install和pip区别
    在前台运行Service
    mybatis处理集合、循环、数组和in查询等语句的使用
    java并发库 Lock 公平锁和非公平锁
  • 原文地址:https://www.cnblogs.com/wt645631686/p/10077730.html
Copyright © 2020-2023  润新知