前提・実現したいこと
https://book.cakephp.org/3/ja/development/errors.html#id7
公式ドキュメントを元に追加したエラーハンドラーでWarning以外のエラーを検知できるか確認したい
エラーハンドラーの役割
システムで起きた例外・error.logに記載される404以外のエラーが起きた時システム管理者に通知する
以下のようなエラーハンドラーを作りシステムエラーがあった場合メール通知するようにしています
色々と前後してしまい申し訳無いのですが、検知できるエラーの種類はこのエラーレベルのなかで、app.phpファイルでログで受け付けるという設定になっているものという理解でいます。
まず、この理解って正しいでしょうか?
https://book.cakephp.org/3/ja/core-libraries/logging.html
Emergency: システムは使用出来ません
Alert: 今すぐ行動する必要がある
Critical: 致命的な状態
Error: エラー状態
Warning: 警告状態
Notice: 正常であるが、重大な状態
Info: インフォメーションメッセージ
Debug: デバッグレベルメッセージ
該当のソースコード
<?php namespace App\Error; use Cake\Error\BaseErrorHandler; use Cake\Core\Configure; use Cake\Controller\ComponentRegistry; use App\Controller\Component\MailComponent; class AppError extends BaseErrorHandler { public function _displayError($error, $debug) { $level = $error["error"]; $systemError = array( 'level' => $error["error"], 'description' => $error["description"], 'file' => $error["file"], 'line' => $error["line"] ); if($level != 'Warning' && $level != 'Notice' && $level != 'Debug'){ $mail = new MailComponent(new ComponentRegistry()); $mail->sendSystemError($systemError); } } public function _displayException($exception) { $systemException = $exception->getMessage(); $mail = new MailComponent(new ComponentRegistry()); $mail->sendSystemException($systemException); } }
試したこと
このようなコントローラーを作りアクセスすることでエラーを発生させようとしました
外部APIで存在しないアカウントでリクエストした場合、error.logにはErrorと出てくるのでerror.logに出てくる内容をエラーハンドラーで取得できるのではと思っていました
ただ、このようなエラーってエラーハンドラーでは検知できないものなのですね
Warning以外のエラーを意図的に発生させる方法がわからず、実際に検知できるのか検証できずにいます。今回のような場合の検証方法ってどのようにしたらよいでしょうか?
<?php namespace App\Controller\Admin; use App\Controller\AppController; use Cake\Core\Configure; use Cake\Chronos\Chronos; use Cake\I18n\Time; use Cake\Core\Exception\Exception; use Cake\Http\Exception\InternalErrorException; use Cake\Datasource\Exception\RecordNotFoundException; class DebugsController extends AppController { ・・・・ public function send_error(){ \Payjp\Payjp::setApiKey("testtest"); \Payjp\Charge::create(array( "card" => "tok_XXXXXX", "amount" => 3500, "currency" => "jpy" )); } }
・・・
読みにくい文書で申し訳ありません
根本的に満たしたい要件に対しての実装では無いのでは?や、この部分の情報が必要ということがありましたらご指摘いただけますとありがたいです
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/11/22 10:27