Ok Tengo otra pregunta HERE para mi clase de registro pero quería poder agregar el número de línea del script de llamada a la entrada del archivo de registro.Obtener el número de línea de PHP desde el evento de registro
He visto __Line __ pero esto me da el número de línea de la línea en la que se encuentra.
Ejemplo:
a.php
$log = new Logger();
$log->debug('hello'); // Say this is line #20
Ahora en mi clase Logger.php en el debug() utilizo el __Line __ constante mágica en, por ejemplo, la línea # 300. Cuando ejecuto el script, me gustaría que la entrada del registro lea 'en la línea 20', pero dice 'en la 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?
Ejemplo función de clase de depuración
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;
}
}
EDIT: debug_backtrace() funciona muy bien !!! Trabajando por debajo de
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;
}
}
+1 Tenga en cuenta que 'debug_backtrace' es slooow, por lo que realmente debería utilizarse solo en el modo de depuración. –