2012-02-27 1 views
3

간단한 방법으로 파일에 쿼리를 기록 할 수 있습니까?Zend_Db_Profiler 로그 파일

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

코드의 무리를 작성 밖으로 파일이 로그 좋을 것이다 : 나는 아무 문제 작동하지 방화범 프로파일을 가지고있다.

Zend_Db_Profiler_Firebug로 스왑 할 수있는 클래스가 있습니까?

업데이트 : 아래 내 대답을 참조하십시오.

답변

5

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에 활용할 수 있습니다.

+1

자세한 답변 주셔서 감사 드리며 내가 찾는 경로로 안내해드립니다 ... 실망 스럽습니다. ZendFramework에 내장 된 것과 같은 것이 없습니다. 답변에 대한 크레딧을 부여하고 답변을 게시합니다. 그것이 내가 찾고 있었던 바로 그 것이기 때문에. –