[英]PHP: How to log fatal errors?
如何將此錯誤記錄到文本文件或數據庫中?
Fatal error: Call to undefined method PROJECTS::ssss()
有一種方法可以處理您的任務,實際上您可以為 FATAL 錯誤設置自定義錯誤處理程序。
你可以這樣做:
ini_set('error_reporting', E_ERROR);
register_shutdown_function("fatal_handler");
function fatal_handler() {
$error = error_get_last();
//Do whatever you want with this error, for example:
YourDBApplicationLayer::writeFatal($error);
}
使用自定義錯誤處理程序無法處理致命錯誤。
最好的解決方案是在 php.ini 中啟用錯誤日志記錄(例如到 syslog),然后使用 logcheck/logsentry 之類的工具接收有關異常 syslog 條目的常規電子郵件。
PHP 也可以代替 syslog 將錯誤記錄到文件中 - 只需查看 php.ini 的錯誤記錄選項。
log_errors = On
error_log = syslog
error_log = /path/to/some/folder/phperrors.log
顯然您只想使用error_log
行之一。
現在在 PHP7 中可以捕獲致命錯誤:
try {
ggggg(); // <---- make a fatal error
} catch(Throwable $e) {
var_dump($e);
}
您可以使用方法重載讓所有
基
類都屬於超類:
class Base
{
public function __call($name)
{
MyLog::logError(...);
trigger_error("Function ".get_class($this)."::$name doesn't exist",
E_USER_ERROR);
}
}
嘗試調用從Base
派生的類的不存在的方法最終將由Base::__call()
。 因此,對於靜態方法,有__callStatic()
(從 PHP 5.3 開始)。
就像是:
if(!method_exists($obj, 'method')){
$db->log('What you want to log'); //log in your DB
error_log('message');//Write to php's error log
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.