Exception時にメール通知などしたい場合のカスタマイズ方法

修正・追加する箇所

  • core.phpファイルの設定
  • 独自の例外ハンドラ用レンダラClassの作成
  • 通知用メールテンプレート作成

core.php 修正

CustomExceptionRendererの部分を独自Class名を入れる

// 80行目付近
Configure::write('Exception', array(
    'handler' => 'ErrorHandler::handleException',
    // 'renderer' => 'ExceptionRenderer', // ここをコメントアウト
    'renderer' => 'CustomExceptionRenderer', // Exception発生したらメール通知するための独自Class
    'log' => true
));

独自の例外ハンドラ用レンダラClassの作成

CustomExceptionRendererというClassを作成し、ここにメール送信処理記載する。

App::uses('ExceptionRenderer', 'Error');
App::uses('CakeEmail', 'Network/Email');

class CustomExceptionRenderer extends ExceptionRenderer {
    public function __construct(Exception $exception) {
        parent::__construct($exception);

        $code = $exception->getCode();
        $codes = $this->controller->response->httpCodes($code);
        $message = $exception->getMessage();
        $stacktrace = $exception->getTraceAsString();

        $CakeEmail = new CakeEmail('default');
        $CakeEmail->to(DEVELOPER_MAIL)
            ->subject(SERVICE_TITLE.' Exception Notice')
            ->template('exception_notice', 'default')
            ->viewVars(compact('code', 'codes', 'message', 'stacktrace'));
        $CakeEmail->send();
    }
}

通知用メールテンプレート作成

<?= date('Y-m-d H:i:s');?> occurred.
$exception->getCode() : <?= $code.PHP_EOL;?>
$this->controller->response->httpCodes($code) : <?= $codes[$code].PHP_EOL;?>
$exception->getMessage() : <?= $message.PHP_EOL;?>
---------------------------------
$exception->getTraceAsString()
<?= $stacktrace;?>

参考サイト:http://ultrah.zura.org/?p=2853

タイトルとURLをコピーしました