我開發了一個星期前一個記錄器類。我已經解決了的問題是:
Post all kinds of errors (E_PARSE,E_ERROR,E_NOTICE,E_WARRNING etc..) into log file using some format methods.
即:
[xxxx-xx-xx xx:xx]
User id: 123
Widget id:321
Error:"The message from PHP"
Line:345
File:test.php
我曾在這裏發現的是PHP是2的錯誤類型:
嚴格(E_ERROR,E_PARSE等)
不嚴格(E_WARRNING,E_NOTICE)
嚴格而不嚴格我自己調用它,它不是來自PHP文檔。類型2可能有幾個錯誤,但類型1只有一個錯誤,致命。 (正如我發現)
我用錯誤處理程序上述兩種類型的:
錯誤處理程序#1
//set 'shutdown_handler' function as strict error handler
register_shutdown_function(array($this, 'shutdown_handler'));
//what does the function look like
public function shutdown_handler()
{
// get last occured error
$e = error_get_last();
$this->LogErrors($e['message'], $e['type'], $e['file'], $e['line']);
}
錯誤處理程序#2
//set 'error_handler' function as not strict error's handler
set_error_handler(array($this, 'error_handler'));
//what does the function look like
public function error_handler($errno, $errstr, $errfile, $errline)
{
$this->LogErrors($errstr, $errno, $errfile, $errline);
}
所以,如果我有例如類型2在我的腳本中有25個錯誤,而類型1中有一個錯誤,我會在我的日誌文件中看到所有這些錯誤。
希望我是有幫助的,並明確
所以,問題是,如果你使用'退出()'或'死()'在你的腳本如何調用你的記錄? –
考慮'file_put_contents()'而不是'fopen()','fwrite()','fclose()'也可能是一個想法。 – CD001
肖恩的答案是你要找的。實現'register_shutdown_function'應該可以幫助你,而不需要改變很多代碼。 –