gpt4 book ai didi

php - Zend_Db_Profiler 记录到文件

转载 作者:可可西里 更新时间:2023-11-01 00:50:09 26 4
gpt4 key购买 nike

有没有一种简单的方法可以将查询记录到文件中?我的 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);
}
}
}

要激活此插件,您可以在 Bootstrap 中使用如下代码:

/**
* 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

关于php - Zend_Db_Profiler 记录到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9468922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com