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-2025 v.1.5 | design: diviXdesign & rainbowcolors