Вопрос

Хорошо, у меня есть еще один вопрос здесь для моего класса ведения журнала, но я хотел иметь возможность добавить номер строки вызывающего скрипта в запись файла журнала.

Я видел __линия__ но это дает мне номер строки, в которой это находится.

Пример:

a.php

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

Теперь в моем Logger.php классе в debug() Я использую __линия__ Магическая константа, например, в строке #300.Когда я запускаю скрипт, я бы хотел, чтобы запись в журнале читалась "в строке 20", но она читалась "в строке 300".Помимо передачи номера строки в функцию, есть ли какой-либо другой способ, которым я мог бы это сделать?

Пример функции класса debug

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

РЕДАКТИРОВАТЬ:debug_backtrace() отлично работает!!!Работая ниже

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;
        }       
    }
Это было полезно?

Решение

Вам придется использовать debug_backtrace для этого или иначе всегда передавайте строку (с __LINE__) к функции.

Другие советы

Вы видели Debug_backtrace () ?Я не уверен в его надлоге, хотя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top