PHP obtém o número da linha do evento de registro
-
13-09-2020 - |
Pergunta
Ok, tenho outra pergunta AQUI para minha classe de log, mas eu queria poder adicionar o número da linha do script de chamada à entrada do arquivo de log.
Eu tenho visto __Linha__ mas isso me dá o número da linha onde isso está.
Exemplo:
a.php
$log = new Logger();
$log->debug('hello'); // Say this is line #20
Agora na minha classe Logger.php no debug() eu uso o __Linha__ Magic Constant, por exemplo, na linha #300.Quando executo o script, gostaria que a entrada de log fosse 'na linha 20', mas fosse 'na linha 300'.Além de passar o número da linha para a função, há alguma outra maneira de fazer isso?
Exemplo de função de classe de depuração
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 muito bem!!!Trabalhando abaixo
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;
}
}
Solução
Você terá que usar debug_backtrace
para isso ou então sempre passe a linha (com __LINE__
) para a função.
Outras dicas
Você viu debug_backtrace()?Não tenho certeza de sua sobrecarga.