簡體   English   中英

PHP:如何記錄致命錯誤?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM