2012-05-24 154 views
2

我怎麼能記錄一個致命錯誤call_user_func_array內出現? 它在作爲守護程序運行的CLI腳本中。 我想記錄發生錯誤的時間,但總是會拋出錯誤消息。日誌記錄錯誤()

東西,我試過,但不能使它工作:

try {call_user_func_array()} catch (Exception $e) {do_log} 

ob_start(); 
try {call_user_func_array()} catch (Exception $e) {do_log} 

register_shutdown_function('shutdownFunction'); 

ini_set('error_log',$baseDir.'/Jobque_error.log'); 
fclose(STDIN); 
fclose(STDOUT); 
fclose(STDERR); 
$STDIN = fopen('/dev/null', 'r'); 
$STDOUT = fopen($baseDir.'/Jobque_application.log', 'ab'); 
$STDERR = fopen($baseDir.'/Jobque_daemon.log', 'ab'); 

回答

1

您無法捕捉到致命的錯誤。這是致命的,所以你的腳本死亡,你無能爲力。

事實上,一個功能通過register_shutdown_handler註冊仍將執行,但你不能得到一個回溯等等。所以這是很沒用。

致命錯誤的唯一可能的日誌是經由log_errors php.ini的設置。

+1

生命的傷心事。 – SunWuKung

+0

我知道這是一個古老的線索,但是,您*可以*發現致命錯誤。在傳遞給'register_shutdown_handler()'的函數中使用'error_get_last()'。 'error_get_last()'給出了一個關聯的錯誤細節數組。如果它的'type'屬性等於'E_ERROR',那是一個致命的錯誤,被捕獲。這從PHP 5.2開始工作。 – curtisdf