Domanda

ok ho un'altra domanda qui < / a> Per la mia classe di registrazione, ma volevo essere in grado di aggiungere il numero di linea dello script di chiamata alla voce del file di registro.

Ho visto __line __ Ma questo mi dà il numero della linea della linea in cui questo è.

Esempio:

A.php

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

Ora nella mia classe Logger.php nel debug () Io uso il __ Linea __ costante magica su linea di esempio # 300. Quando eseguo lo script vorrei la voce del registro per leggere 'on line 20' ma leggi 'on line 300'. Oltre a passare il numero di linea verso la funzione c'è qualche altro modo che potrei fare questo?

Funzione di classe di debug di esempio

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;
        }       
    }
.

Modifica: Debug_BackTrace () funziona alla grande !!! Lavorando sotto

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;
        }       
    }
.

È stato utile?

Soluzione

dovrai usare debug_backtrace per questo oaltrimenti passano sempre la linea (con __LINE__) alla funzione.

Altri suggerimenti

Hai visto debug_backtrace () ?Non sono sicuro del suo sovraccarico.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top