2010-02-16 67 views
4

我使用了一個將錯誤轉換爲PHP 5中的異常的類,它將錯誤記錄到文件中和/或通過電子郵件發送給指定的帳戶。有一個更好的方法嗎?有一些關於我知道會更好。我正在使用set_error_handler。PHP中全局錯誤處理的最佳實踐?

set_error_handler("exception_error_handler"); 

我的代碼做什麼它應該的,因爲它記錄和電子郵件錯誤,但我在做的過程中,最好的方式。將它記錄到數據庫會更好 - 假設數據連接將出現錯誤。什麼是網站的行業標準?

+2

refactormycode.com – 2010-02-16 21:40:33

+0

你需要用'set_error_handler'設置你的錯誤處理程序。否則,你的問題是什麼?你的代碼沒有做什麼,你想要它做什麼?更加詳細一些。 – meagar 2010-02-16 21:42:18

回答

6

您處理錯誤的代碼必須絕對防不勝防。

有時候會因爲你忘了測試的一個非常模糊的理由而被踢出去,但是當你的代碼版本的世界末日苦苦掙扎時,你仍然希望它能夠運行。

將其輸出寫入數據庫會爲您的代碼創建一個巨大的依賴關係 - 而數據庫的缺失很可能是導致報告問題的主要原因。

依賴郵件仍然是一個依賴項,但是在發生中斷時最直接的目標應該是讓系統再次工作 - 所以發送電子郵件是一種非常有效的方式,提醒您需要修復某些內容。

PHP的文件處理工具不適合併發訪問 - 所以雖然我建議在本地記錄任何事件,但不要從代碼中寫入文件 - 使用syslog接口。通過一切手段發送一封電子郵件,其中你已經發送到系統日誌。

HTH

C.

2

我不會將該邏輯轉儲到錯誤處理程序中。

看看這個方法從Kohana

/** 
* PHP error handler, converts all errors into ErrorExceptions. This handler 
* respects error_reporting settings. 
* 
* @throws ErrorException 
* @return TRUE 
*/ 
public static function error_handler($code, $error, $file = NULL, $line = NULL) 
{ 
    if (error_reporting() & $code) 
    { 
     // This error is not suppressed by current error reporting settings 
     // Convert the error into an ErrorException 
     throw new ErrorException($error, $code, 0, $file, $line); 
    } 

    // Do not execute the PHP error handler 
    return TRUE; 
} 

清潔,並做的方法描述。您現在可以將您的處理移入異常處理程序或在catch塊中。

+0

嗯,當他有一個代碼示例時,我回答了這個問題,但現在它消失了,所以如果我的回答沒有任何意義,我表示歉意。 – 2010-02-16 21:46:45