2015-11-30 38 views
0

我想記錄所有生成的錯誤白error_reporting(E_ALL);在日誌文件中。 因此,當您在PHP腳本中發生錯誤時,您通常會看到該錯誤。 我嘗試了很多事情,但我來最接近的是白衣錯誤日誌handeling到自定義文件

asdasc(); // generate error 
$i=error_get_last(); 
if($i['message']!==''){ 
error_log(date('Y-m-d-h:m:s') . " | type = " .$i ['type']." message = " .$i ['message']." file = " .$i ['file']." line = " .$i ['line'] , 3, "my-errors.log");} 

這樣,我看到有具體日期的錯誤,但我想看到的是,我應該看什麼錯誤,如果它是在我的屏幕。如:
SQLSTATE [HY000] [1045]訪問被拒絕用戶'root'@'localhost'(使用密碼:否)或 致命錯誤:調用C:\ xampp \ htdocs中的未定義函數blabla()。 。\ index.php on line 125

有沒有辦法做到這一點?

thnx in advanced。

+0

是的!處理代碼中的數據庫訪問擴展錯誤。顯示一些示例數據庫訪問代碼,並告訴我們您正在使用哪種數據庫訪問擴展 – RiggsFolly

+0

hello,謝謝你的回覆,但是我真的不需要它僅用於數據庫連接錯誤(如果我正確理解你的),但所有錯誤,我已經編輯了我的問題。所以錯誤就像未定義的函數一樣。 – hexedecimal

+0

您可以編寫的最佳錯誤處理代碼是none。認真。只要讓應用程序正常崩潰並根據自己的喜好調整[error_log](http://php.net/manual/en/errorfunc.configuration.php#ini.error-log)指令即可。 –

回答

1

使用error_get_last()

error_log(date('Y-m-d-h:m:s') . " | error = " . print_r(error_get_last(), true), 3, "my-errors.log"); 

可以以及建立自己的錯誤處理類應用程序:

class MyErrorHandlerClass 
{ 
    public function MyErrorHandlerMethod($errno, $errmsg, $filename, $linenum, $vars) 
    { 
     // log you error 
    } 
} 

然後你可以定義自己的錯誤處理:

$ErrorHandler = new MyErrorHandlerClass(); 
set_error_handler(array($ErrorHandler, 'MyErrorHandlerMethod')); 

error_reporting() btw。不會產生錯誤,它只會控制顯示錯誤的級別。發生錯誤時,始終會生成堆棧跟蹤。

+0

好的想法,但unfortanaly我在日誌文件中唯一得到的是: 2015-12-02-09:12:22 |錯誤= – hexedecimal

+0

調用您未定義的函數將導致致命錯誤。爲了處理這個問題,你可以使用'register_shutdown_function()',這個[例子](http://php.net/manual/en/function.error-get-last.php#92810) –