Ok Tôi có một câu hỏi khác HERE cho Lớp Ghi nhật ký của mình nhưng tôi muốn có thể thêm số dòng của tập lệnh gọi vào mục nhập tệp nhật ký.PHP lấy số dòng từ sự kiện ghi
Tôi đã xem __Line __ nhưng điều này mang lại cho tôi số dòng của dòng tại vị trí này.
Ví dụ:
a.php
$log = new Logger();
$log->debug('hello'); // Say this is line #20
Bây giờ trong lớp Logger.php tôi trong debug() Tôi sử dụng __Line __ liên tục kỳ diệu trên ví dụ dòng # 300. Khi tôi chạy kịch bản, tôi muốn mục nhập nhật ký đọc 'trên dòng 20' nhưng nó đọc 'trên dòng 300'. Bên cạnh việc chuyển số dòng vào hàm, còn cách nào khác tôi có thể làm điều này không?
Ví dụ chức năng debug lớp
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;
}
}
EDIT: debug_backtrace() hoạt động tuyệt vời !!! Làm việc dưới
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;
}
}
+1 Lưu ý rằng 'debug_backtrace' bị hủy, vì vậy nó chỉ nên được sử dụng ở chế độ gỡ lỗi. –