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 |
デバッグ用の詳細情報 |
.env の LOG_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、本番環境では error や warning を設定し、ノイズを減らして重要なログだけを追えるようにするのが定石です。
ログチャネルの設定(config/logging.php)
ログの出力先(チャネル)は config/logging.php で定義します。Laravelには次のチャネルが標準で用意されています。
| チャネル | 概要 |
|---|---|
stack |
複数のチャネルをまとめて使う(デフォルトの既定値) |
single |
単一のログファイル(laravel.log)に書き込む |
daily |
日付ごとにログファイルを分割する |
slack |
Slackへ通知として送信 |
syslog / errorlog |
OSのシステムログへ記録 |
papertrail / stderr |
外部サービスや標準エラー出力へ送信 |
null |
ログを破棄する(テスト時などに利用) |
チャネルは .env の LOG_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を変更したのに反映されない
本番運用でよくあるのが「.env の LOG_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コマンド徹底解説もあわせてご覧ください。

コメント