在使用其餘語言的打印日誌的時候,常常能看到打印日誌時帶上文件地址和代碼行數,對於調試和查找問題很是方便,可是 php 日誌庫裏則不多見到這個功能,但這個功能仍是能夠實現的。php
關鍵點就是用 php 的 debug_backtrace 函數架構
先看個例子 test.php函數
function test() { print_r(debug_backtrace()); } test();
輸出debug
Array ( [0] => Array ( [file] => /path/test.php [line] => 7 [function] => test ) )
debug_backtrace 能獲取整個調用鏈,因此,咱們的日誌庫就能夠根據這一條實如今日誌中帶上文件和行號的功能調試
function xlog(string $lv, string $format, ...$args) { $log = "%s\t%s:%s\t%s" . PHP_EOL; $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); return sprintf($log, $lv, trim($backtrace[0]['file']), $backtrace[0]['line'], sprintf($format, ...$args)); } echo xlog("info", "我是一條日誌%s", ...["呀"]);
輸出日誌
info /Users/moyt/php/jax/example/log/test.php:9 我是一條日誌呀
若是要開發本身的日誌庫,記得調整 $backtrace 的 file 和 line 變量的索引值。code
更多架構、PHP、GO相關踩坑實踐技巧請關注個人公衆號:PHP架構師 orm