PHP получают номер строки от регистрирующегося события

Хорошо у меня есть другой вопрос ЗДЕСЬ для моего Класса Входа, но я хотел смочь добавить номер строки сценария выполнения вызова к записи файла журнала.

Я видел __ Строка __, но это дает мне номер строки строки, где это в.

Пример:

a.php

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

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

Функция класса отладки в качестве примера

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

7
задан Community 23 May 2017 в 11:45
поделиться

2 ответа

Для этого вам нужно использовать debug_backtrace , иначе всегда передавать строку (с __ LINE __ ) функции.

13
ответ дан 6 December 2019 в 14:00
поделиться

Вы видели debug_backtrace () ? Хотя я не уверен в его накладных расходах.

2
ответ дан 6 December 2019 в 14:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: