PHP получить номер строки из журнала событий
Хорошо, у меня есть еще один вопрос ЗДЕСЬ для моего класса ведения журнала, но я хотел иметь возможность добавить номер строки вызывающего скрипта в запись файла журнала.
Я видел __Line__, но это дает мне номер строки, где это находится.
Пример:
a.php
$log = new Logger();
$log->debug('hello'); // Say this is line #20
Теперь в моем классе Logger.php в debug() я использую магическую константу __Line__, например, в строке #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;
}
}
2 ответа
Вам придется использовать debug_backtrace
для этого или иначе всегда проходить линию (с __LINE__
) к функции.
Вы видели debug_backtrace ()? Я не уверен в его издержках, хотя.