3

すべてのデータベースエラー(発生した場合)をキャッチし、エラーレポートを電子メールで送信する方法を探しています。通常のphpエラーの場合、CI_Exceptionsクラスを拡張し、ロギングに加えてメール送信コードを追加しました。しかし、データベースエラーは発生しませんCI_Exceptionsが、代わりに直接ログに記録されるCI_DB_Driver->query()ため、Systemフォルダー内のファイルを変更したくありません。

また、アプリが実行するすべてのクエリの周りにロギングコードを記述したくありません。

4

1 に答える 1

5

CI_Exceptions show_errorメソッドを拡張して、dbドライバーを探すのではなく、「error_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 に答える