修正・追加する箇所
- 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;?>