ragtek

Debugging im vB

Erstellt am Mrz.16, 2009 von admin | vBulletin

Das hier ist meine Debug Funktion für das vBulletin. Sie ermöglicht es Variablen, Werte, Texte und was man sonst so gebrauchen kann, in eine Logdatei zu schreiben.
Die Idee dazu hatte ich aus diesem Blog: http://www.christophdorn.com/Blog/2008/09/02/firephp-and-zend-framework-16/

Natürlich ist sie nicht das Nonplusultra, aber damals hat sie vollkommen ausgereicht.
Heute verwende ich eine Weiterentwicklung, die mir das Loggen in eine Datei, aber auch die direkte Ausgabe in die Firebugkonsole mittels Firephp bietet.

/**
 * Debugfunction
 *
 * @param str $text
 * @param str $type
 * @param str $callsite
 */
function ragtek_log($text, $type='debug', $callsite='thisscript')
{
    global $datenow, $timenow;
    switch ($callsite) {
        case 'thisscript':
            $callingfrom = THIS_SCRIPT;
        break;
        default:
            $callingfrom = $callsite;
        break;
    }
    switch ($type) {
        case 'debug':
            $text = "$datenow - $timenow " .  ' - Debugmsg called from ' . $callingfrom . ':' . "\n" . $text . "\n" . "---------------------------------" . "\n";
        break;
        case 'error':
            $text = "$datenow - $timenow " .  ' - ERROR:' . "\n" . $text . "\n" . "---------------------------------" . "\n";
        break;
    }
    $logfile = fopen('developerlog.log', "a");
    fwrite($logfile, $text);
    fclose($logfile);
}
ragtek_log('mein text');

Keine verwandten Artikel.

:, ,

9 Kommentare

  • Cosmo

    Hallo ragtek,

    dank dir sehr, das klappt super. :)
    Weißt du, wie ich die Variable festhalten kann?

    Beispiel:
    ragtek_log($totalposts);

    Da würde ich mir solche eine Ausgabe realisieren:
    Jetzige Zustand:
    16.03.2009 – 18:16 – Debugmsg called from index:
    14
    ———————————

    Mein Idee:
    16.03.2009 – 18:16 – Debugmsg called from index:
    Contents of the variable $totalposts:
    14
    ———————————

    • admin

      Das würde nicht so einfach gehen wegen der Scopeprobleme denke ich.(Kann mich aber auch irren, bin ja kein PHP Profi, NOCH NICHT:D)
      Man könnte es eventuell über einen Array lösen.

      Also das man in der Funktion die Funktion func_get_args() aufruft und die Parameter ermittelt.

      function show_args($arg, $whatever, $args)
      {
      	$argsarray = func_get_args();
      	return $argsarray;
      }
      $einz = 'einzwert';
      $vars = array('$foobar' => $einz, '$foo' =>'zwei');
      var_dump(show_args('la', $vars))
      

      Falls jemand bessere Ideen hat, nur her damit!
      Bin für jeden Tip dankbar.

  • Cosmo

    Okay, ich bin noch nicht richtig wach:

    echo ‘$totalposts’;

    Sorry. :(

  • Cosmo

    Hallo ragtek, ich habs aufgegeben, heißt, ich komme leider nicht weiter. :(

    Dank dir noch einmal.

  • Cosmo
    	function raktek_log($varname, $type = 'debug')
    	{
    		global $$varname, $datenow, $timenow;
    		$loggingval = $$varname;
    		switch ($type)
    		{
    			case 'debug':
    				$text = "$datenow - $timenow " . ' - Debug-Message called from ' . THIS_SCRIPT . ':' . "\n" . '$' . $varname . ': ' . $loggingval . "\n" . "---------------------------------" . "\n";
    			break;
    			case 'error':
    				$text = "$datenow - $timenow " .  ' - ERROR:' . "\n" . $loggingval . "\n" . "---------------------------------" . "\n";
    			break;
    		}
    		$logfile = fopen('developerlog.log', 'a');
    		fwrite($logfile, $text);
    		fclose($logfile);
    	}

    Aufruf mit rakteg_log(’variable’). Kein $ Zeichen verwenden.

    BTW.
    Was soll der Typ error anstelle von debug bedeuten? hat du da einmal ein Beispiel.

    Mit besten Grüßen übrigens von Surviver und Stoebi.

    • admin

      In dieser Funktion einfach nur ein anderer Text am Anfang steht und ich so die ^^

      Eigentlich wollte ich das später noch ausbauen, (Unterscheidung Debugmsg & Fehlermeldung, damit zB die Fehler in eine eigene Datei geschrieben werden zwecks Übersicht usw.) aber ja…. im Moment arbeite ich wiedermal an viel zu vielen “Baustellen” weswegen da noch nicht wirklich was brauchbares für die Öffentlichkeit entstanden ist.

  • Cosmo

    Ich finde die Idee gut, wegen der Übersichtlichkeit, nur ist das doch so, das vBulletin von Hause aus eine Logging Funktion anbietet, was das Fehler-Logging von PHP-Erros angeht. Oder würde deine Funktion noch weiter gehen?

    • admin

      Ich dachte da eher an “meine eigenen” Fehler & Fehlertypen (kA wie ichs genau erklären soll^^) und nicht echte PHP Fehler.
      zB:

      if ($foo < 100)
      {
          // $foo sollte nie unter 100 sein
          ragtek_log('whatever', 'error');
      }
      

      Also auch zB für Warnungen geeignet usw.

      Die Idee kam von Firebug & Firephp.
      Dort gibt es ja verschiedene Nachrichtentypen:

      1. log
      2. info
      3. warn
      4. error

      Diese wollte ich hier nun auch einbauen, da das endgültige Ziel ja die Debugausgabe in eine Logdatei & in Firephp war.

  • Cosmo

    Solltest du dazu kommen, würden wir uns freuen, wenn du uns daran teilhaben lassen würdest. :)

Kommentar hinterlassen