ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php – Zend_Db_Profiler登录到文件

2019-09-02 11:40:39  阅读:206  来源: 互联网

标签:zend-db php zend-framework zend-db-profiler


是否有一种简单的方法来记录查询文件?我有Firebug分析工作没有问题:

resources.db.params.profiler.enabled = "true"
resources.db.params.profiler.class = "Zend_Db_Profiler_Firebug"

将它记录到一个没有编写一堆代码的文件会很好.

有没有我可以用Zend_Db_Profiler_Firebug换掉的课程?

更新:请参阅下面的答案.

解决方法:

从ZF 1.11.11开始,没有内置的探查器类可以将查询记录到文件中.目前,FireBug是唯一的专业Db Profiler.

这里有两种方法可以解决它而不需要额外的代码.

首先,查看this answer,因为它显示了如何扩展Zend_Db_Profiler以使其将查询记录到queryEnd上的文件中.如果它不能完全按照你的意愿行事,你可以扩展Zend_Db_Profiler并使用提供的代码作为起点.

下一个示例是对我在某些应用程序中使用的插件的略微修改,我在应用程序处于开发阶段时使用该插件来分析查询.此方法使用dispatchLoopShutdown()插件来获取Db Profiler的实例并将查询记录到文件中.

<?php   /* library/My/Page/DbLogger.php */
class My_Page_DbLogger extends Zend_Controller_Plugin_Abstract
{
   public function dispatchLoopShutdown()
   {
       $db        = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('db');
       $profiler  = $db->getProfiler();

       if ($profiler === NULL || !($profiler instanceof Zend_Db_Profiler))
           return;

       // either create your logger here based on config in application.ini
       // or create it elsewhere and store it in the registry
       $logger = Zend_Registry::get('dblog');

       $totalQueries = $profiler->getTotalNumQueries();
       $queryTime    = $profiler->getTotalElapsedSecs();

       $longestTime  = 0;
       $queries      = $profiler->getQueryProfiles();

       if ($queries !== false) {
           $content = "\nExecuted $totalQueries database queries in $queryTime seconds<br />\n";

           foreach ($queries as $query) {
               // TODO: You could use custom logic here to log only selected queries

               $content .= "Query (" . $query->getElapsedSecs() . "s): " . $query->getQuery() . "\n";
               if ($query->getElapsedSecs() > $longestTime) {
                   $longestTime  = $query->getElapsedSecs();
               }
           }

           $content .= "Longest query time: $longestTime.\n" . str_repeat('-', 80);

           $logger->info($content);
       }
   }
}

要激活此插件,您可以在引导程序中使用这样的代码:

/**
 * Register the profiler if we are running in a non-production mode
 */
protected function _initPageProfiler()
{
    if (APPLICATION_ENV == 'development') {
        $front = Zend_Controller_Front::getInstance();
        $front->registerPlugin(new My_Page_DbLogger());
    }
}

理想情况下,从长远来看,您可能希望创建一个扩展Zend_Db_Profiler的类,并允许在配置中指定其他选项,例如日志文件路径,日志优先级.这样,您可以利用Zend_Db_Profiler的现有过滤器.

标签:zend-db,php,zend-framework,zend-db-profiler
来源: https://codeday.me/bug/20190902/1790863.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有