3

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

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

4

1 回答 1

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;
}
于 2013-01-10T00:25:31.487 回答