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;
        }       
    }
Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top