Skip to main content

ロギングとは

Laravelのロギングはチャンネルという概念を軸に設計されています。 チャンネルとはログの書き込み先と方法を定義した設定の単位で、ファイル、Slack、syslog などさまざまな出力先を組み合わせられます。 内部では Monolog ライブラリを使用しており、豊富なハンドラーとフォーマッターを活用できます。
デフォルトでは stack チャンネルが使われます。stack は複数のチャンネルをまとめて扱う親チャンネルです。

設定

ロギングの設定は config/logging.php に集中しています。環境変数 LOG_CHANNEL でデフォルトチャンネルを切り替えます。

利用可能なチャンネルドライバ

ログレベル

Laravelは RFC 5424 で定義された8段階のログレベルをサポートしています。 深刻度の高い順に並んでいます。 チャンネルの level 設定は最低ログレベルを意味します。 たとえば levelerror なら、error 以上(criticalalertemergency)のみが書き込まれます。

基本的な使い方

Log ファサード

Illuminate\Support\Facades\Log ファサードを使って各レベルのメッセージを書き込みます。
コントローラーでの使用例です。

log() ヘルパー関数

log() ヘルパーを使うと Log ファサードを import せずに書けます。

コンテキスト情報の追加

メッセージと一緒にコンテキスト(配列)を渡すと、関連する情報をまとめて記録できます。

withContext() — チャンネル全体に共通コンテキストを付与

特定のチャンネルに対して、以降のすべてのログエントリに共通の情報を付与したい場合は withContext() を使います。 リクエストIDのようにすべてのログに含めたい情報に向いています。

shareContext() — すべてのチャンネルに共通コンテキストを付与

withContext() は対象チャンネルのみに効果が限られますが、shareContext() はすべてのチャンネルに共通のコンテキストを付与します。

チャンネルの設定

stack チャンネル — 複数チャンネルへの同時書き込み

stack チャンネルを使うと、1回のログ呼び出しで複数のチャンネルに書き込めます。
この設定では debug 以上のすべてのログが daily(ファイル)に書き込まれ、critical 以上のみ slack にも送信されます。
本番環境では slack チャンネルのレベルを errorcritical に設定するのがおすすめです。 軽微なログまで Slack に流すと通知が大量になり、重要なアラートが埋もれてしまいます。

daily チャンネル — ログローテーション

daily チャンネルは日付ごとにファイルを分けて、古いファイルを自動削除します。
days を小さくすると古いログが早く削除されます。 本番環境での障害調査に備えて、十分な保持期間を確保してください。

Slack へのエラー通知

Slack の Incoming Webhook URL を取得し、.env に設定します。
stack チャンネルに slack を含め、LOG_CHANNEL=stack を設定すればエラー発生時に自動通知されます。

特定のチャンネルにログを書き込む

Log::channel() で対象チャンネルを明示的に指定できます。

オンデマンドチャンネル

Log::build() を使うと、設定ファイルに定義せずにその場でカスタムチャンネルを作れます。 テストや一時的な出力先への書き込みに便利です。

実践的なユースケース

ミドルウェアでリクエストIDを付与する

すべてのログに共通のリクエストIDを付与すると、ログから特定リクエストの流れを追いやすくなります。
1

ミドルウェアを作成する

2

handle() メソッドを実装する

3

ミドルウェアを登録する

bootstrap/app.php でグローバルミドルウェアとして登録します。
この設定後、すべてのログに request-id が自動的に付与されます。

非推奨警告のログ記録

PHP や Laravel の非推奨機能を使った際の警告をログに残せます。
.env でチャンネルを指定します。

Laravel Pail — リアルタイムログ監視

Laravel Pail はターミナルでアプリケーションのログをリアルタイムに確認できる開発ツールです。
Pail の実行には PHP の PCNTL 拡張が必要です。

インストール

基本的な使い方

ログのフィルタリング

まとめ

  • 開発環境: singledaily でファイルに書き込む
  • 本番環境: stackdaily(ファイル保存)と slack(エラー通知)を組み合わせる
  • 特定処理のログ: Log::build() でオンデマンドチャンネルを作成して独立したファイルに書き込む
  • リアルタイム監視: php artisan pail でターミナルから確認する
  • debug ログには機密情報が含まれる場合があります。本番環境では LOG_LEVEL=error 以上を推奨します。
  • ログファイルは定期的にローテーションしてディスクを圧迫しないようにしてください(daily チャンネルの days 設定)。
  • Slack などの外部サービスへの通知はレートリミットに注意してください。重大なエラーのみ通知するようレベルを設定してください。
最終更新日 2026年3月29日