Laravel Logの使い方完全ガイド|設定・出力・レベルからトラブルシューティングまで

基本文法・構文ガイド

Laravelには、Monolog をベースにした強力なログ機能が標準で組み込まれています。しかし「Log::info() はどう使うのか」「ログレベルはどう使い分けるのか」「.env を変更したのにログの出力が変わらない」など、実際に手を動かすとつまずくポイントも少なくありません。本記事では、Laravel 13 環境で実際にコマンドを実行して検証した結果をもとに、Laravel Logの基本設定から出力方法、レベルの使い分け、よくあるトラブルの対処法まで一通り解説します。

Laravel Logとは何か

Laravel Logは、PSR-3のログインタフェースに準拠した「Monolog」ライブラリをベースにしたロギング機能です。Log ファサードを通じて、アプリケーション内のどこからでも簡単にログを出力できます。設定を変更しなければ、ログは storage/logs/laravel.log に書き込まれます。

基本の使い方:Logファサードでログを出力する

最も基本的な使い方は、Log ファサードのメソッドを呼び出すだけです。

Log::info('User purchase completed', ['user_id' => $userId, 'product_id' => $productId]);

Laravel 13で実際に上記コードを実行すると、storage/logs/laravel.log に次の形式で記録されることを確認しました。

[2026-07-21 05:00:58] local.INFO: User purchase completed {"user_id":42,"product_id":7}

local の部分は APP_ENV の値です。本番環境(production)で実行すれば production.INFO のように環境名がそのまま出力されるため、複数環境のログを混在させて調査する際の目印になります。

ログレベルの使い分け

Laravel Logは、PSR-3に準拠した8段階の重要度レベルをサポートしています。

レベル 用途
emergency システムが使用不能な状態
alert 即座の対応が必要な状態
critical 致命的な状態(コンポーネントの不具合など)
error エラーが発生したが処理は継続可能
warning エラーではないが注意すべき事象
notice 通常だが注視すべき事象
info 一般的な情報(処理の記録など)
debug デバッグ用の詳細情報

.envLOG_LEVEL で「どのレベル以上を記録するか」を制御できます。実際に LOG_LEVEL=error を設定して debug / info / error の3つを出力してみると、次のように error だけが記録されることを確認しました。

Log::debug('this is debug, should be suppressed');
Log::info('this is info, should be suppressed');
Log::error('this is error, should appear');
[2026-07-21 05:01:13] local.ERROR: this is error, should appear

開発環境では debug、本番環境では errorwarning を設定し、ノイズを減らして重要なログだけを追えるようにするのが定石です。

ログチャネルの設定(config/logging.php)

ログの出力先(チャネル)は config/logging.php で定義します。Laravelには次のチャネルが標準で用意されています。

チャネル 概要
stack 複数のチャネルをまとめて使う(デフォルトの既定値)
single 単一のログファイル(laravel.log)に書き込む
daily 日付ごとにログファイルを分割する
slack Slackへ通知として送信
syslog / errorlog OSのシステムログへ記録
papertrail / stderr 外部サービスや標準エラー出力へ送信
null ログを破棄する(テスト時などに利用)

チャネルは .envLOG_CHANNEL(既定値は stack)で切り替えます。daily チャネルを明示的に指定して出力すると、日付が入ったファイルが自動生成されることを確認しました。

Log::channel('daily')->warning('daily channel test');
// storage/logs/laravel-2026-07-21.log が生成される
[2026-07-21 05:01:03] local.WARNING: daily channel test

daily チャネルは LOG_DAILY_DAYS(既定14日)で設定した日数を超えた古いログファイルを自動的に削除します。長期間ログを保持する必要がない場合は、single よりも daily を使う方がディスク容量の管理がしやすくなります。

用途別の実践テクニック

コンテキスト情報を付加する

第2引数に連想配列を渡すことで、後から検索・分析しやすいコンテキスト情報をログに残せます。

Log::info('User purchase completed', ['user_id' => $userId, 'product_id' => $productId]);

例外を記録する

例外を捕捉した際は、exception キーに例外インスタンスを渡すと、メッセージだけでなくスタックトレースまで記録されます。

try {
    // 何らかの処理
} catch (\Throwable $e) {
    Log::error('Exception occurred', ['exception' => $e]);
}

実際にこのコードを実行すると、例外メッセージに続けてスタックトレースの各行が laravel.log に書き出されることを確認しました。エラーの種類ごとの分類やログ解析ツールとの連携など、エラーログの活用をより深掘りしたい場合はLaravelのエラーログをマスターし、バグを効率的に解決する方法とは?もあわせて参照してください。なお、例外ハンドラ経由で例外を記録したい場合は report() ヘルパーも利用できます(詳細はreportコマンドの解説記事を参照)。

特定の処理だけ別ファイルへ出力する(オンデマンドチャネル)

config/logging.php を編集せずに、その場限りのチャネルを作って出力先を分けることもできます。決済処理のログだけを別ファイルに残したい、といったケースで便利です。

$logger = Log::build([
    'driver' => 'single',
    'path' => storage_path('logs/payment.log'),
]);
$logger->info('Payment channel test');

実行すると storage/logs/payment.log が新規作成され、指定した内容がそのまま記録されることを確認しました。

よくあるトラブルと対処法

.envのLOG_LEVELを変更したのに反映されない

本番運用でよくあるのが「.envLOG_LEVEL を変更したのに、ログの出力内容が変わらない」というトラブルです。これは config:cache を実行済みの環境で起こります。実際に LOG_LEVEL=debug の状態で php artisan config:cache を実行したあと、.env だけを LOG_LEVEL=error に書き換えて Log::debug() を呼び出すと、キャッシュされた古い設定が優先され、debug ログがそのまま出力されてしまうことを確認しました。

php artisan config:cache   # この時点の.env設定がキャッシュされる
# .envを変更しても...
php artisan tinker --execute="Log::debug('should this appear?');"
# → キャッシュされた設定のまま出力されてしまう

設定変更を反映させるには、config:clear でキャッシュを削除する(または config:cache を再実行する)必要があります。デプロイフローに config:cache を組み込んでいる場合は、.env 変更後に必ずキャッシュの再生成を行うようにしましょう。

laravel.logが肥大化して開きにくい

既定の single チャネルは1つのファイルに書き込み続けるため、稼働期間が長いアプリケーションでは laravel.log が数百MB〜数GBに膨らみ、エディタで開けなくなることがあります。この場合は LOG_CHANNEL=daily に切り替え、LOG_DAILY_DAYS で保持日数を指定するのがシンプルな解決策です。既に肥大化したファイルがある場合は、tail -f storage/logs/laravel.log で最新行だけを確認しながら、古いログはアーカイブ・削除する運用に切り替えると扱いやすくなります。

よくある質問

Laravel Logはどこに保存されますか?

既定では storage/logs/laravel.log に保存されます。チャネルを daily にすると storage/logs/laravel-YYYY-MM-DD.log の形式で日付ごとに分割されます。

本番環境ではどのログレベルにすべきですか?

error または warning を推奨します。debug のまま本番運用すると、ログ量が増えすぎて重要なエラーが埋もれやすくなります。

Laravel LogとLaravelのエラーログの違いは何ですか?

Laravel Logはアプリケーション全体のロギング機能そのものを指し、エラーログはその中でも error 以上のレベルで記録された内容を指します。エラーログの分類や監視ツールとの連携についてはこちらの記事で解説しています。


Laravel Logは、config/logging.php でのチャネル設定とログレベルの使い分けさえ押さえておけば、日々のデバッグから本番監視まで幅広く活用できます。設定変更が反映されないといったトラブルは config:cache の状態を疑い、ログの肥大化には daily チャネルで対処しましょう。関連するArtisanコマンドの一覧はLaravel Artisanコマンド徹底解説もあわせてご覧ください。

レン (Wren)

こんにちは。レンです。

Laravelのコードの森に住んでいる、小さな案内役です。
ルーティングの枝やクラスの影を歩きながら、コードの流れや仕組みを眺めています。

このサイトでは、Laravelの基本から実装のコツまで、開発で役立つポイントを静かに整理しています。
難しいことを増やすのではなく、コードの見通しが少し良くなるヒントを届けるのが役目です。

「この処理はどこに書くのがいいのか」
「Laravelではどう考えると整理できるのか」

そんな疑問に、小さなメモを残すような気持ちで記事を書いています。

コードを書いている途中で迷ったとき、
このサイトが少し立ち止まって整理できる場所になればうれしいです。

レン (Wren)をフォローする

コメント