Frage

Ok, ich habe noch eine Frage HIER für meine Protokollierungsklasse, aber ich wollte in der Lage sein, die Zeilennummer des aufrufenden Skripts zum Protokolldateieintrag hinzuzufügen.

Ich habe gesehen __Linie__ aber das gibt mir die Zeilennummer der Zeile, in der sich das befindet.

Beispiel:

a.php

$log = new Logger();
$log->debug('hello'); // Say this is line #20

Jetzt verwende ich in meiner Logger.php-Klasse im debug() das __Linie__ Magic Constant zum Beispiel in Zeile #300.Wenn ich das Skript ausführe, möchte ich, dass der Protokolleintrag „in Zeile 20“ lautet, aber er lautet „in Zeile 300“.Gibt es außer der Übergabe der Zeilennummer an die Funktion noch eine andere Möglichkeit, dies zu tun?

Beispiel einer Debug-Klassenfunktion

public function debug($message) {
        if(DEBUG) {
            $this->calling_script = $this->getScriptBaseName();
            $this->log_file = LOG_FILE_DIRECTORY."/".$this->calling_script.".log";
            $this->fh = fopen($this->log_file, 'a') or die("Can't open log file: ".$this->log_file);

            if($this->first_run) {
                $this->log_entry = "\n[" . date("Y-m-d H:i:s", mktime()) . "][debug][line:".__LINE__."]:\t".$message."\n";
            } else {
                $this->log_entry = "[" . date("Y-m-d H:i:s", mktime()) . "][debug][line:".__LINE__."]:\t".$message."\n";
            }       
            fwrite($this->fh, $this->log_entry);
            fclose($this->fh);

            $this->first_run = false;
        }       
    }

BEARBEITEN:debug_backtrace() funktioniert großartig!!!Unten wird gearbeitet

public function debug($message) {
        if(DEBUG) {
            $debug_arr = debug_backtrace();
            $this->calling_script = $this->getScriptBaseName();
            $this->log_file = LOG_FILE_DIRECTORY."/".$this->calling_script.".log";
            $this->fh = fopen($this->log_file, 'a') or die("Can't open log file: ".$this->log_file);

            if($this->first_run) {
                $this->log_entry = "\n[" . date("Y-m-d H:i:s", mktime()) . "][debug]:\t".$message." [line:".$debug_arr[0]['line']."]\n";
            } else {
                $this->log_entry = "[" . date("Y-m-d H:i:s", mktime()) . "][debug]:\t".$message." [line:".$debug_arr[0]['line']."]\n";
            }       
            fwrite($this->fh, $this->log_entry);
            fclose($this->fh);

            $this->first_run = false;
        }       
    }
War es hilfreich?

Lösung

Sie müssen verwenden debug_backtrace dafür sonst immer die Zeile übergeben (mit __LINE__) zur Funktion.

Andere Tipps

Haben Sie gesehen, wie Sie gesehen haben debug_backtrace () ?Ich bin mir nicht sicher, obwohl es seinen Overhead ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top