2012-05-24 157 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