Pregunta

OK Tengo otra pregunta aquí < / a> Para mi clase de registro, pero quería poder agregar el número de línea del script de llamadas a la entrada del archivo de registro.

He visto __line __ Pero esto me da el número de línea de la línea donde se encuentra.

Ejemplo:

a.php

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

Ahora en mi clase Logger.php en la depuración () Utilizo el __ line __ constante de magia en la línea de ejemplo # 300. Cuando ejecuto el script, me gustaría que la entrada de registro lea "en la línea 20", pero lee 'en línea 300'. Además de pasar el número de línea a la función, ¿hay alguna otra forma en que pueda hacer esto?

Función de clase de depuración de ejemplo

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

Editar: Debug_Backtrace () Funciona GRANDE !!! Trabajando abajo

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

¿Fue útil?

Solución

Tendrá que usar debug_backtrace para esto oElse siempre pasa la línea (con __LINE__) a la función.

Otros consejos

¿Ha visto debug_backtrace () ?Sin embargo, no estoy seguro de su cabeza.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top