カテゴリ: Laravel 更新日: 2026/03/21

LaravelのMonolog設定とログレベルの使い分けを初心者向けに徹底解説!

LaravelのMonologの設定とログレベルの使い分け
LaravelのMonologの設定とログレベルの使い分け

先生と生徒の会話形式で理解しよう

生徒

「Laravelのログを調べていたら『Monolog』という言葉が出てきました。これは何ですか?」

先生

「MonologはLaravelがログの記録に使っているライブラリです。Laravelのログ機能はこのMonologの上に作られているので、仕組みを知ると設定の幅がグッと広がりますよ。」

生徒

「ログレベルという言葉も見かけるんですが、どう使い分ければいいですか?」

先生

「ログレベルはメッセージの重要度を示す仕組みです。どのレベルがどんな場面で使うかを一緒に見ていきましょう!」

1. MonologとはLaravelのログを支えるライブラリ

1. MonologとはLaravelのログを支えるライブラリ
1. MonologとはLaravelのログを支えるライブラリ

Laravelでログを記録する機能は、内部でMonologというPHP用のログライブラリを使っています。ライブラリとは、よく使う処理をまとめて再利用できるようにしたプログラムの部品集のことです。

Monologは非常に広く使われているオープンソースのライブラリで、ファイルへの書き込みだけでなく、メール送信・Slackへの通知・データベースへの記録など、様々な場所にログを送ることができます。オープンソースとは、プログラムのコードが公開されていて誰でも無料で使えるものです。

LaravelはLogファサードという窓口を提供しており、開発者はMonologの細かい仕組みを意識しなくてもログを書き込めます。しかし設定をカスタマイズしたいときはMonologの知識が必要になります。ファサードとは、複雑な内部処理をシンプルに呼び出せるようにLaravelが用意した便利な仕組みのことです。

2. ログレベルとは何か?8つの種類を理解しよう

2. ログレベルとは何か?8つの種類を理解しよう
2. ログレベルとは何か?8つの種類を理解しよう

ログレベルとは、記録するメッセージの重要度を段階的に分類する仕組みです。Monologは国際的な標準規格(PSR-3)に従って8つのレベルを定義しています。重要度が高い順に並べると以下のとおりです。

レベル名 意味 使う場面の例
emergency緊急事態システム全体が使えなくなった
alert即時対応が必要データベースが完全に停止した
critical重大な問題決済処理が完全に失敗した
errorエラーが発生した例外が発生してページが表示できない
warning警告・注意が必要非推奨の機能を使っている
notice注目すべき通常の出来事重要な設定値が変更された
info一般的な情報ユーザーがログインした
debugデバッグ用の詳細情報変数の中身を確認したい

この8段階の中からどのレベル以上を記録するかを設定で決められます。たとえばerror以上に設定すると、errorcriticalalertemergencyの4つだけが記録され、warning以下は無視されます。

3. ログレベルの実際の書き方と使い方

3. ログレベルの実際の書き方と使い方
3. ログレベルの実際の書き方と使い方

Laravelで各ログレベルを使うときは、Logファサードにレベル名と同じメソッドを呼び出します。メソッドとは、クラスの中に定義された処理のまとまりのことです。

以下はそれぞれのログレベルをコードで書いた例です。場面に応じて使い分けることが大切です。


<?php

use Illuminate\Support\Facades\Log;

// 情報として残したいとき(ユーザーの行動記録など)
Log::info('ユーザーがログインしました。', ['user_id' => 123]);

// 軽い問題が起きているとき(動くが注意が必要な状況)
Log::warning('APIのレスポンスが遅延しています。応答時間: 3.5秒');

// エラーが発生したとき(処理が失敗した)
Log::error('決済処理に失敗しました。', ['order_id' => 456, 'reason' => 'カード残高不足']);

// 開発中に変数の中身を確認したいとき
Log::debug('カート内容を確認', ['items' => ['商品A', '商品B'], 'total' => 3200]);

第二引数(2番目に渡す値)に配列を渡すと、メッセージと一緒に詳細情報もログに記録できます。開発中はdebuginfoを多用して処理の流れを把握し、本番環境ではwarning以上に絞るというのが一般的な使い方です。

4. config/logging.phpでMonologの設定をカスタマイズする

4. config/logging.phpでMonologの設定をカスタマイズする
4. config/logging.phpでMonologの設定をカスタマイズする

Laravelのログ設定はconfig/logging.phpというファイルで管理されています。このファイルを開くと、ログをどのように保存するかを決めるチャンネルの設定が並んでいます。チャンネルとは「ログをどこへ・どんな形式で・どのレベルから記録するか」をまとめた設定のセットです。

以下はdailyチャンネルにMonologのレベルを指定してカスタマイズした例です。


<?php

// config/logging.phpの設定例
return [
    'default' => env('LOG_CHANNEL', 'daily'),

    'channels' => [
        'daily' => [
            'driver' => 'daily',
            'path'   => storage_path('logs/laravel.log'),
            'level'  => env('LOG_LEVEL', 'warning'), // warning以上だけ記録
            'days'   => 30,                           // 30日分保持
        ],
    ],
];

'level' => 'warning'と設定すると、warningerrorcriticalalertemergencyの5段階が記録され、noticeinfodebugは記録されません。本番環境ではwarningまたはerrorに設定してログの量を抑えるのがおすすめです。'days' => 30は30日分のログファイルを保持するという意味です。

5. 複数のチャンネルにログを同時に送るstackチャンネル

5. 複数のチャンネルにログを同時に送るstackチャンネル
5. 複数のチャンネルにログを同時に送るstackチャンネル

Laravelにはstackチャンネルという便利な仕組みがあります。stackとは「積み重ね」という意味で、複数のチャンネルをまとめてひとつのように扱える機能です。たとえば「通常のログはファイルに書き込みつつ、重大なエラーだけSlackにも通知する」という設定が一度にできます。


<?php

// config/logging.phpのstackチャンネル設定例
'channels' => [
    'stack' => [
        'driver'   => 'stack',
        'channels' => ['daily', 'slack'], // dailyとslack両方に送る
    ],

    'daily' => [
        'driver' => 'daily',
        'path'   => storage_path('logs/laravel.log'),
        'level'  => 'debug',
        'days'   => 14,
    ],

    'slack' => [
        'driver'   => 'slack',
        'url'      => env('LOG_SLACK_WEBHOOK_URL'),
        'username' => 'LaravelBot',
        'level'    => 'critical', // criticalより重大なものだけSlackに通知
    ],
],

この設定ではdebug以上のすべてのログをdailyファイルに記録しつつ、critical以上の重大なエラーだけをSlack(チャットツール)にも通知します。LOG_SLACK_WEBHOOK_URLはSlackが発行するWebhook URLで、.envファイルに記載します。Webhookとは「特定のイベントが起きたときに外部サービスへ自動で通知を送る仕組み」のことです。

6. .envファイルでログレベルを環境ごとに切り替える方法

6. .envファイルでログレベルを環境ごとに切り替える方法
6. .envファイルでログレベルを環境ごとに切り替える方法

開発環境と本番環境でログレベルを変えたい場合、config/logging.phpを直接書き換えるのではなく、.envファイルの設定値を変えるのがベストな方法です。.envファイルとは、環境ごとに異なる設定をまとめた特別なファイルです。

config/logging.phpの中でenv('LOG_LEVEL', 'debug')と書いておけば、.envファイルのLOG_LEVELの値を変えるだけでログレベルを切り替えられます。


// 開発環境の.envファイル設定例
APP_ENV=local
LOG_CHANNEL=daily
LOG_LEVEL=debug      // 開発中はすべてのログを記録する

// 本番環境の.envファイル設定例
APP_ENV=production
LOG_CHANNEL=daily
LOG_LEVEL=warning    // 本番ではwarning以上だけ記録してログを減らす

開発中はdebugにして変数の中身や処理の流れを細かく確認できるようにし、本番公開時にはwarningerrorに変えて本当に必要な情報だけを残すというのが現場でよく使われる方法です。.envファイルを変更したあとはphp artisan config:clearコマンドでキャッシュをクリアすることを忘れないようにしましょう。キャッシュとは一時的に保存されたデータのことで、クリアしないと変更が反映されないことがあります。

7. MonologのProcessorを使ってログに自動で情報を付加する方法

7. MonologのProcessorを使ってログに自動で情報を付加する方法
7. MonologのProcessorを使ってログに自動で情報を付加する方法

MonologにはProcessor(プロセッサー)という機能があります。プロセッサーとは、ログを書き込む前に自動で追加情報を付け加えてくれる仕組みのことです。たとえば「どのユーザーが操作したか」「どのリクエストIDか」などを毎回手動で書かなくても、自動的にすべてのログに付加することができます。

Laravelではconfig/logging.phptapオプションを使ってプロセッサーを登録できます。以下はWebRequestProcessorを追加してリクエスト情報を自動付与する設定例です。


<?php

// config/logging.phpにProcessorを追加する例
'daily' => [
    'driver'     => 'daily',
    'path'       => storage_path('logs/laravel.log'),
    'level'      => env('LOG_LEVEL', 'debug'),
    'days'       => 14,
    'processors' => [
        // リクエストのURL・メソッド・IPをログに自動付与する
        Monolog\Processor\WebProcessor::class,
        // PHPのメモリ使用量をログに自動付与する
        Monolog\Processor\MemoryUsageProcessor::class,
    ],
],

WebProcessorはリクエストのURL・HTTPメソッド(GETやPOSTなどアクセスの種類)・IPアドレスを自動でログに追加します。MemoryUsageProcessorはそのときのPHPのメモリ使用量を記録します。メモリとはプログラムが動くときに使う作業スペースのことです。このようにプロセッサーを活用すると、個別のログを書くたびに毎回同じ情報を書く手間が省けて、ログの品質が均一になります。

関連記事:
カテゴリの一覧へ
新着記事
New1
Symfony
Symfonyのルーティング構成の基本を完全解説!初心者向けにYAML・PHP・アノテーション方式をやさしく紹介
New2
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法
New3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
New4
Symfony
Symfony学習に役立つおすすめドキュメント・教材・リソース一覧【初心者向け】
人気記事
No.1
Java&Spring記事人気No1
PHP
PHPのif文の使い方を完全ガイド!初心者でもわかる条件分岐の基本
No.2
Java&Spring記事人気No2
CodeIgniter
CodeIgniterルーティングを完全攻略!正規表現でURLを自由自在に操る方法
No.3
Java&Spring記事人気No3
PHP
PHPのswitch文の使い方!多くの条件分岐をスッキリ書く方法と注意点
No.4
Java&Spring記事人気No4
PHP
PHPで文字列を結合する方法!ドット演算子と代入演算子の使い方を徹底解説
No.5
Java&Spring記事人気No5
Symfony
Symfonyで翻訳(i18n)機能を使う方法を解説!初心者にもわかる国際化対応の基本
No.6
Java&Spring記事人気No6
CodeIgniter
CodeIgniter(コードイグナイター)入門!どんな開発案件に向いている?利用シーン別解説
No.7
Java&Spring記事人気No7
Laravel
LaravelのAPIルーティングを設定する方法!初心者でもわかるapi.phpの使い方
No.8
Java&Spring記事人気No8
Laravel
Laravelのview()関数の使い方を完全ガイド!初心者でもわかるBladeテンプレート表示と画面作成