Loading:


Własny system debungowania oraz logowania zmiennych - ZEND Debug + Logs

Opis

 

Atykuł przedstawia system debungowania czyli wyświetlania zmiennych w środowisku testowym (developerskim) w celu szybszego wykrycia błędu w aplikacji. System posiada również zintegrowany system zapisu do logów.

 

Struktura Katalogów

 

Musimy dodać jeden katalog o nazwie 'logs' w folderze /application/ również w logs tworzymy plik o nazwie file.log.

Następnie dodajemy katalog 'Debugs' do folderu /library/.

 

Implementacja

 

Cały kod jest zawarty w klasie Debugs_Debug, którą należy dodać do katalogu 'Debugs', w takim przypadku nazwa pliku to: library/Debugs/Debug.php. Kod dla tej klasy jest dstepny w listingu 1.0.

 

Wykorzystanie

 

Ponieważ nasza klasa jest statyczna należy wywołać w jakimkolwiek miejscu w kodzie następujące polecenie:

 

 Debugs_Debug::dump($vars, false, 'short', false);

 

Lista zmiennych:

/**
*
* @param mixed $var
* @param boolean $exit Czy po wyświetleniu przerwać działanie?
* @param string $description Określa sposób wyświetlania opisu. Możliwe wartości short, medium, long.
* @param boolean $log Czy zapisywać w logach?
* @return void
  */

 

Wyświetlenie Debungacji

 

Aby wyświetlić wszystkie zmienne przekazane do klasy Debug należy posłużyć się jednym poleceniem, który domyślnie powinniśmy dodać w BOOTSTRAP'erze (index.php aplikacji), zaraz pod: $frontController->dispatch();

 

//debug msgs
echo Debugs_Debug::displayMessages(); 



Napisz Artyku³

Listing

//listing 1.0

<?php
/**
* Klasa debugująca
*
*/

class Debugs_Debug {

        public static $debugMessages = '';
   /**
   * Wyświetla przekazaną wartość
   *
   * @param mixed $var
   * @param boolean $exit Czy po wyświetleniu przerwać działanie?
   * @param string $description Określa sposób wyświetlania opisu. Możliwe wartości short, medium, long.
   * @param boolean $log Czy zapisywać w logach?
   * @return void
   */

   public static function dump($var, $exit = false, $description = 'short', $log = true) {
        if(Zend_Registry::getInstance()->get('env') == 'local' || Zend_Registry::getInstance()->get('env') == 'home.pl') {
                $debugBacktrace = debug_backtrace();
         
                $message = '<hr />';
         
                switch ($description) {
                   case 'short':
                      $message .= '<strong>'.$debugBacktrace[0]['file'].'</strong> w linii <strong>'.$debugBacktrace[0]['line'].'</strong>';
                      break;
                   case 'medium':
                      $message .= '<ol>';
                      foreach ($debugBacktrace as $i => $d) {
                         $message .= '<li>';
                         $message .= '<strong>'.$d['class'].$d['type'].$d['function'].'</strong>';
                         $message .= ' - w pliku <em>'.$d['file'].'</em> w linii <em>'.$d['line'].'</em>';
                         $message .= ' z '.count($d['args']).' argumentami.';
                         $message .= '</li>';
                      }
                      $message .= '</ol>';
                      break;
                   case 'long':
                      $message .= '<ol>';
                      foreach ($debugBacktrace as $i => $d) {
                         $message .= '<li>';
                         $message .= 'W pliku <em>'.$d['file'].'</em> w linii <em>'.$d['line'].'</em>';
                         $message .= ' wywołano <strong>'.$d['class'].$d['type'].$d['function'].'</strong>';
                         if(count($d['args']) != 0) $message .= '<ol>';
                         $message .= '(';
                         foreach ($d['args'] as $a) {
                            $message .= '<li>';
                            //Zend_Debug::dump($a);
                            $message .= '</li>';
                         }
                         $message .= ').';
                         if(count($d['args']) != 0) $message .= '</ol>';
                      }
                      $message .= '</li></ol>';
                      break;
                }
         
                $message .= '<hr />';
                $message .= Zend_Debug::dump($var, 'DUMP', false);
               
                self::$debugMessages .= $message;
                //echo $message;
         
                if($log) {
                   $writer = new Zend_Log_Writer_Stream('../application/logs/file.log');
                  $logger = new Zend_Log($writer);
         
                  $logger->log(strip_tags(str_replace('&quot;', '"', $message)), 1);
                }
         
                if($exit) {
                   exit();
                }
        }
   }

   public static function displayMessages() {
        if(self::$debugMessages != ''){
                $msgContainer = '<div style="text-align: left; background-color: #dfdfdf; font-family: Courier,monospace; font-size: 11px; font-style: normal; font-weight: normal; font-variant: normal; padding: 5px;">';
                $msgContainer .= self::$debugMessages;
                $msgContainer .= '</div>';
                return $msgContainer;          
        }
   }
}




Dodano przez: divix
Ranga: Administrator serwisu Punktów: 0
Komentarze użytkowników
    • Tre¶æ komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2024 v.1.5 | design: diviXdesign & rainbowcolors