ZF 1.11.11 현재 파일에 쿼리를 기록하는 기본 제공 프로파일 러 클래스가 없습니다. 현재 FireBug는 유일한 Db 프로파일 러입니다.
추가 코드가 없어도 해결할 수있는 두 가지 방법이 있습니다.
먼저 Zend_Db_Profiler
을 확장하여 queryEnd
에있는 파일에 쿼리를 기록하는 방법을 보여주기 때문에 this answer을 확인하십시오. 원하는대로 잘 수행하지 못하면 Zend_Db_Profiler
을 확장하고 제공된 코드를 시작점으로 사용할 수 있습니다.
다음 예는 응용 프로그램을 개발할 때 쿼리를 프로파일 링하는 데 사용하는 일부 응용 프로그램에있는 플러그인을 약간 수정 한 것입니다. 이 방법은 dispatchLoopShutdown()
플러그인을 사용하여 Db 프로파일 러의 인스턴스를 가져 와서 쿼리를 파일에 기록합니다.
/**
* 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
를 확장하는 클래스를 만들고 추가로 허용 할 것 :
<?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);
}
}
}
당신이 당신의 부트 스트랩에 다음과 같은 코드를 사용할 수 있습니다,이 플러그인을 활성화하려면 로그 파일 경로, 로그 우선 순위와 같은 설정에 지정할 옵션. 이렇게하면 기존 필터를 Zend_Db_Profiler
에 활용할 수 있습니다.
자세한 답변 주셔서 감사 드리며 내가 찾는 경로로 안내해드립니다 ... 실망 스럽습니다. ZendFramework에 내장 된 것과 같은 것이 없습니다. 답변에 대한 크레딧을 부여하고 답변을 게시합니다. 그것이 내가 찾고 있었던 바로 그 것이기 때문에. –