例外処理とログ出力(Monolog)

Laravelの「エラーハンドリングとロギング」において重要な要素である「例外処理とログ出力(Monolog)」について、以下のとおり詳しく説明します。


1. 例外処理(Exception Handling)

基本構造

Laravelの例外処理は、App\Exceptions\Handler クラスを中心に構成されており、このクラスは Illuminate\Foundation\Exceptions\Handler を継承しています。

主なメソッド

  • register()
    カスタム例外のレポートや処理を登録します。

  • render($request, Throwable $exception)
    クライアントへのレスポンス(HTML、JSONなど)を生成します。

  • report(Throwable $exception)
    例外をログに記録します(Monologと連携)。

カスタム例外

Laravelでは独自の例外クラスを作成して、用途別のエラー処理が可能です。例えば:

php
use Exception; class CustomException extends Exception { // カスタム処理 }

2. ログ出力(Monologとの連携)

Monologとは

Laravelは、PHPの強力なログライブラリ Monolog をベースにしています。これにより、様々なログチャンネル(ファイル、Slack、syslog、databaseなど)に対応できます。

ログ設定ファイル

ログ設定は config/logging.php にあります。ここでは以下の設定が可能です:

  • default: デフォルトのログチャンネル(例: stack

  • channels: 複数のログチャネルの定義

php
'channels' => [ 'stack' => [ 'driver' => 'stack', 'channels' => ['single', 'slack'], 'ignore_exceptions' => false, ], 'single' => [ 'driver' => 'single', 'path' => storage_path('logs/laravel.log'), 'level' => 'debug', ], ]

ログレベル(Monolog準拠)

  • emergency

  • alert

  • critical

  • error

  • warning

  • notice

  • info

  • debug

ログ出力の使用例

php
use Illuminate\Support\Facades\Log; Log::error('エラーが発生しました'); Log::info('情報ログ'); Log::debug('デバッグ情報', ['user_id' => 1]);

3. 実践:例外とログの統合

Handler クラス内で例外に応じたログ出力を行うことも可能です。

php
public function report(Throwable $exception) { if ($exception instanceof CustomException) { Log::warning('カスタム例外が発生しました: ' . $exception->getMessage()); } parent::report($exception); // 親クラスのreportも呼び出す }

まとめ

Laravelにおける「例外処理とログ出力」は、堅牢なアプリケーション開発に不可欠な要素です。Monologとの連携により、柔軟かつ詳細なログ管理が可能となり、トラブルシュートや監視の信頼性が大きく向上します。また、Handler クラスを通じて、例外ごとにログやレスポンスを適切に制御することができます。

ChatGPT4o 生成日:2025/06/23