2012-05-21 43 views
0

我想擴展異常類,以便在指定錯誤代碼通過時記錄和發送電子郵件 - 我希望所有錯誤都是自定義異常類型的診斷 - 我遇到的問題是當電子郵件或記錄器類因任何原因而失敗時,我該如何解決這個問題擴展異常類和日誌記錄/電子郵件

我想我需要在電子郵件或記錄器類的情況下恢復爲默認的異常,而對於一切定製例外將被使用

任何幫助,將不勝感激

回答

0

我遇到的問題是我怎麼解決時,無論是電子郵件或記錄器類以任何理由

包裹郵件/日誌在一個try-catch塊嘗試失敗。

try{ 
    myExceptionClass::logException($customException); 
    myExceptionClass::emailNotification($adminEmail); 
}catch(Exception $e){ 
    exit("dangit"); 
} 

理想情況下,您的錯誤處理將永遠不會允許這實際發生,所以您應該能夠將其視爲「邊緣情況」。我假設你仍然允許服務器記錄你的PHP錯誤,所以你仍然有一些東西可以用來找到這樣的問題。

+0

是的,我試過,但問題是,我正嘗試使用錯誤處理程序中的同一個文件編寫器和電子郵件類 - 正如你可以想象,在這些類中的任何一個例外的情況下,它是一個遞歸調用 - 將異常處理程序的電子郵件和日誌記錄與應用程序其餘部分使用的處理程序分開的最佳方式是什麼? –

+0

正確 - 顯然,如果你的錯誤處理程序有問題,你不想嘗試並使用它_again_。你需要在你的'catch {}'塊中實現不同的(可能更簡單的)邏輯。這就是我的意思,「希望這是一個優勢案例」 - 你不希望事情會像這樣經常出現問題。你的catch應該比普通的錯誤處理更簡單/更健壯。 – traq

+0

...您也可以使用'set_exception_handler()'作爲後備來捕捉任何其他問題。在開發過程中,我會打印有用的錯誤消息和堆棧跟蹤。當該網站處於活動狀態時,它只是將用戶重定向到錯誤頁面。 (通過檢查Apache的日誌很容易看出發生這種情況的時間。)對於用戶來說,比看到一個「破損」的頁面要好 - 但說實話,我認爲任何用戶都沒有機會看到一個:) – traq