2013-01-09 53 views
3

我正在寻找一种方法来捕获所有数据库错误(如果和当它们发生时)并发送错误报告我的电子邮件。对于常规的php错误,我扩展了CI_Exceptions类,并添加了我的电子邮件发送代码以及日志记录。但是数据库错误不会通过CI_Exceptions而是直接从CI_DB_Driver->query()记录,我不想修改系统文件夹中的任何文件。Codeigniter捕获数据库错误

此外,我不想在应用程序的每个查询周围编写日志记录代码。

回答

5

我会试图扩展CI_Exceptions show_error方法来捕获通过'error_db'模板传递的任何错误,而不是通过db驱动程序搜索。

由于您已经用电子邮件代码扩展了CI_Exceptions,这看起来是最佳做法。

function show_error($heading, $message, $template = 'error_general', $status_code = 500) 
{ 
    set_status_header($status_code); 

    $message = '<p>'.implode('</p><p>', (! is_array($message)) ? array($message) : $message).'</p>'; 

    if ($template == 'error_db') 
    { 
     // do email send here with $message 
    } 

    if (ob_get_level() > $this->ob_level + 1) 
    { 
     ob_end_flush(); 
    } 
    ob_start(); 
    include(APPPATH.'errors/'.$template.'.php'); 
    $buffer = ob_get_contents(); 
    ob_end_clean(); 
    return $buffer; 
} 
+0

谢谢你的作品奇妙。我只做了一个小小的编辑。 –