カテゴリ: Laravel 更新日: 2025/12/08

Laravelでログを出力する方法(Monolog・storage/logs)

Laravelでログを出力する方法(Monolog・storage/logs)
Laravelでログを出力する方法(Monolog・storage/logs)

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

生徒

「Laravelで発生したエラーや動作ログを保存したいです。どうすればいいですか?」

先生

「LaravelではMonologというライブラリでログを書き出す仕組みが用意されていますよ。」

生徒

「Monologって何ですか?storage/logsってフォルダにあるって聞きました。」

先生

「難しく聞こえるけど、初心者でもわかるように丁寧に説明しますね!」

1. Laravelのログとは?Monologって何?

1. Laravelのログとは?Monologって何?
1. Laravelのログとは?Monologって何?

Laravel(ララベル)には、アプリの動作状況やエラーを記録するログ機能が標準で備わっています。このログ機能の中心になっているのが、PHPで広く使われているMonolog(モノログ)というライブラリです。Monologは「メッセージをどこに記録するか?」を自由に選べるのが特徴で、ファイル・メール・Slack・syslogなど、さまざまな場所へ出力できます。LaravelはこのMonologを使いやすい形にまとめており、初心者でも簡単にログを書き出せるようになっています。

「ログ」と聞くと難しく感じるかもしれませんが、役割はとてもシンプルで、「あとで状況を振り返るためのメモを自動で残す仕組み」だと思えばイメージしやすいでしょう。エラー調査や動作確認に欠かせない機能で、開発者にとっては心強いサポート役です。

ログがどんなものか知るための超シンプルサンプル

まずは、「ログを書くと実際にどうなるのか?」をイメージしやすいサンプルを見てみましょう。次のコードは、Laravelがログにメッセージを残す最も基本的な例です。


use Illuminate\Support\Facades\Log;

Route::get('/sample-log', function () {
    Log::info('ログの仕組みが動きました!');
    return 'ログを書き込みました。';
});

このルートへアクセスすると、Laravelはstorage/logs/laravel.logというファイルに「ログの仕組みが動きました!」というメッセージを記録します。ファイルを開くと、いつログが出力されたかの日時も一緒に記録されており、あとから状況を確認するときにとても便利です。

こうした仕組みを支えているのがMonologであり、Laravelはその強力な機能を初心者でも直感的に扱える形で提供してくれています。まずは「ログを書くとファイルにメモが残る」という感覚をつかむことが第一歩です。

2. storage/logsフォルダにどんなログが溜まる?

2. storage/logsフォルダにどんなログが溜まる?
2. storage/logsフォルダにどんなログが溜まる?

Laravelで出力されたログは、基本的にプロジェクト配下のstorage/logsフォルダにどんどん溜まっていきます。インストールした直後の設定のままだと、まずはstorage/logs/laravel.logというファイルが用意され、アプリで発生したエラーや動作の記録がここに追記されていきます。

設定ファイルのconfig/logging.phpでは、ログの保存方法を「ドライバ」と呼ばれる単位で切り替えられるようになっており、代表的なものがsingledailyです。singleは1つのファイル(laravel.log)に書き続ける方式、daily日付ごとにファイルを分けて保存する方式で、例えばlaravel-2025-07-15.logのような名前で作成されます。dailyを使うと、古いログを自動で削除してくれるため、ファイルが肥大化しにくく、初心者にも扱いやすい設定です。

実際にstorage/logsをのぞいてみよう

先ほどのサンプルルート(/sample-log)にアクセスしたあとで、エディタやエクスプローラーからstorage/logs/laravel.logを開いてみると、次のような行が追加されているはずです。


[2025-01-01 12:34:56] local.INFO: ログの仕組みが動きました!

この1行には、いつ(日時)・どの環境で(localなど)・どのレベルで(INFOなど)・どんなメッセージが出たのかがまとめて記録されています。エラーが出たときや、処理の流れを確認したいときは、このstorage/logsフォルダを開いて中身を読むことで、アプリの「裏側で何が起きていたか」を落ち着いて追いかけることができます。

開発に慣れてきたら、singleからdailyに切り替えたり、必要に応じてログを整理することで、長く運用するアプリの状態も把握しやすくなります。まずは「ログはstorage/logsに溜まる」という場所のイメージをつかんでおきましょう。

3. どうやってログを書くの?Logファサードを使おう

3. どうやってログを書くの?Logファサードを使おう
3. どうやってログを書くの?Logファサードを使おう

Laravelで実際にログを書き出すときは、Logファサードという仕組みを使います。難しく聞こえますが、「Logという名前の便利な道具を呼び出してメッセージを残す」とイメージすれば十分です。やることはとてもシンプルで、決まった書き方を覚えておけば、どの画面や処理からでも同じようにログを出力できます。

ここでは、Laravelのルート(routes/web.php)に、アクセスされたことを記録するだけの簡単なログ処理を書いてみましょう。まずは次のコードを追加するイメージです。


use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Route;

Route::get('/test', function () {
    // ここでログを書き出す
    Log::info('このルートにアクセスされました。');

    return 'ログを書き込みました。';
});

書き方の流れは次の通りです。まず、ファイルの上のほうでuse Illuminate\Support\Facades\Log;と書いて、Logファサードを使えるようにします。そのうえで、処理の中でLog::info('メッセージ');と書くと、Laravelが自動的にstorage/logs/laravel.logにメッセージを追記してくれます。

ブラウザで/testにアクセスすると、画面には「ログを書き込みました。」と表示されます。そのあとでstorage/logs/laravel.logを開いてみると、日時と一緒に「このルートにアクセスされました。」というログが1行追加されているはずです。「ルートにアクセスした=ログに記録された」という動きが確認できればOKです。

処理のどこに書いてもOKな「目印」としてのログ

Log::infoは、コントローラの中やバリデーション後の処理など、気になる場所に自由に挟み込んで使えます。たとえば、「この処理の前までは問題なく動いた」「ここから先でエラーが起きていそう」といったポイントごとにログを残しておくと、あとからstorage/logsを見返すだけで、アプリがどこまで動いていたのかが分かりやすくなります。

最初のうちは、重要な処理の入り口やボタンが押されたタイミングなどに、Log::info('ボタンが押されました');のようなメッセージを入れて、ログにどんな情報が残るのかを試してみると良いでしょう。Laravelのログ出力に慣れてくると、エラー調査や動作確認がぐっと楽になります。

4. ログレベルって何?レベル別の記録も簡単

4. ログレベルって何?レベル別の記録も簡単
4. ログレベルって何?レベル別の記録も簡単

ログには「どれくらい重要な出来事なのか」を示すログレベルがあり、Laravel(Monolog)は8段階のレベルを使ってメッセージを分類します。これは、あとからログを確認するときに「どの出来事を優先してチェックすべきか」を判断しやすくするための仕組みです。開発中は軽い通知としてのinfoや細かい動きの把握に便利なdebugをよく使い、トラブルが起きたときはwarningerrorが重要な手がかりになります。

まずは、代表的な4つのレベルを使った簡単な例を見てみましょう。ルートでアクセス状況やエラーを仮想的に記録するだけのシンプルなサンプルです。


use Illuminate\Support\Facades\Log;

Route::get('/log-level-sample', function () {
    Log::debug('デバッグ用の細かな情報です。');
    Log::info('通常の処理が実行されました。');
    Log::warning('注意が必要な場面が発生しました。');
    Log::error('重大なエラーが発生しました。');

    return 'ログレベルのサンプルを実行しました。';
});

このルートにアクセスすると、4つのメッセージがそれぞれのレベルでstorage/logs/laravel.logに記録されます。ログを開くと、たとえばWARNINGERRORが一目で確認できるため、「どこから調べればいいか」が非常に分かりやすくなります。

また、LaravelではLog::channel('daily')->warning(...)のように、ログレベルと出力先(チャンネル)を組み合わせることも可能です。これにより、重要度の高いログだけを専用ファイルに保存するなど、用途に応じた柔軟な管理ができます。まずは主要なログレベルの違いを押さえ、「何を記録するべきか」を意識しながら使い分けてみると、アプリの状態をより正確に追いかけられるようになります。

5. 詳しい情報も一緒に記録できる「コンテキスト」機能

5. 詳しい情報も一緒に記録できる「コンテキスト」機能
5. 詳しい情報も一緒に記録できる「コンテキスト」機能

ログにはメッセージだけでなく、状況をより分かりやすくするための追加情報(コンテキスト)をセットで記録できます。これは「どのユーザーが操作したのか」「どんなデータが送られてきたのか」など、原因調査に役立つ手掛かりを残せる便利な仕組みです。特に実際の開発現場では、単なる文章よりも具体的な情報があるほうが、後から問題箇所を見つけやすくなります。

Laravelでは、コンテキストを連想配列として渡すだけで手軽に利用できます。次の例は、ログインしたユーザーIDを一緒に記録するシンプルなサンプルです。


use Illuminate\Support\Facades\Log;

Route::get('/context-sample', function () {
    $userId = 123; // 実際は認証されたユーザーIDなどを取得する

    Log::info('ユーザーがログインしました', [
        'user_id' => $userId,
        'action' => 'login'
    ]);

    return 'コンテキスト付きログを書き込みました。';
});

この処理を実行してstorage/logs/laravel.logを開くと、メッセージの後ろに {"user_id":123,"action":"login"} のような追加情報が並んでいるのが確認できます。これにより、「誰が」「どんな状況で」操作したのかが一目でわかり、原因追跡の精度が大きく上がります。

コンテキストは、ボタンが押された回数、送信されたデータ内容、リクエスト元のIPアドレスなど、必要な情報を自由に付け加えられます。最初は小さなデータから記録していき、どんな情報が調査に役立つかを少しずつ見つけていくとよいでしょう。Laravelのログは、ただのメモではなく「状況を丸ごと残すツール」として活用することで、本来の力を発揮します。

6. Monologハンドラで拡張してカスタム出力も可能

6. Monologハンドラで拡張してカスタム出力も可能
6. Monologハンドラで拡張してカスタム出力も可能

Laravelは基本設定のままでも十分ログを扱えますが、より細かく制御したい場面ではMonologハンドラを使ったカスタマイズが便利です。ハンドラとは「ログをどこへ、どの形式で書き込むか」を担当する仕組みで、ファイルだけでなくメール送信や外部サービス連携など、目的に応じた出力方法を追加できます。難しそうに感じるかもしれませんが、実際には設定ファイルに数行追加するだけで始められます。

ここでは最も分かりやすい例として、ログを専用のファイルに書き込む新しいチャンネルを作る方法を紹介します。特定の種類のログだけを別ファイルに分けて保存したいときに役立ちます。


// config/logging.phpの一部
'channels' => [
    'custom' => [
        'driver' => 'monolog',
        'handler' => Monolog\Handler\StreamHandler::class,
        'with' => [
            'stream' => storage_path('logs/custom.log'),
            'level' => Monolog\Logger::INFO,
        ],
    ],
],

この設定を追加すると、custom.logという専用ログファイルが自動で作られます。使い方も簡単で、次のようにログチャンネルを指定して呼び出します。


use Illuminate\Support\Facades\Log;

Route::get('/custom-log-sample', function () {
    Log::channel('custom')->info('カスタムチャンネルにログを書き込みました。');
    return 'custom.log にログを出力しました。';
});

これを実行すると、通常の laravel.log ではなく、logs/custom.log にメッセージが保存されます。ログを種類ごとに分けたり、重要な通知だけ別ファイルへ送ったりと、用途に応じた整理がしやすくなるのが大きなメリットです。

慣れてきたら、メール送信やSlack通知に対応したハンドラも活用できるため、エラー発生時に即座に知らせる仕組みを整えることも可能です。まずはシンプルなファイル出力のカスタムチャンネルから試して、「ログを目的別に分ける」という感覚をつかむと理解が進みやすくなります。

7. トラブル対策とコツ

7. トラブル対策とコツ
7. トラブル対策とコツ

ログ出力はLaravel開発に欠かせない仕組みですが、実際に使い始めると「ログが出ない」「文字化けする」「ファイルが重くなる」など、初心者がつまずきやすいポイントがあります。ここでは、よくある悩みを分かりやすくまとめ、すぐに実践できるチェック項目として紹介します。少し意識するだけで、ログ調査がスムーズになり、アプリの状態をより正確に把握できるようになります。

  • ログが見当たらない:まずは storage/logs フォルダが存在するか確認しましょう。サーバー環境では権限不足で書き込めないケースも多く、storage 配下に書き込み権限があるかをチェックすると改善することがあります。
  • 文字化けして読めない:日本語を含むログが「???」のようになってしまう場合は、ファイルの文字コードやエディタ側の設定を見直してみてください。通常はUTF-8で保存されますが、エディタが別の形式で開いていることが原因になることがあります。
  • ログファイルが大きくなりすぎる:アプリが成長するほどログ出力量は増えていきます。daily ドライバに切り替えて日ごとにファイルを分けると、1つのログが巨大になるのを防げます。不要になった古いログを自動削除してくれるため、管理もしやすくなります。
  • ログの見た目をもっと整えたい:「時刻やメッセージの形式を変えたい」「JSON形式で出力したい」といった場合は、Monologのformatterを利用すると細かく調整できます。読みやすい形式に整えるだけで、トラブルの原因を探すスピードが大きく変わります。

ログは単なる記録ではなく、アプリの状態を理解するための強力な手がかりです。ちょっとした工夫や設定の見直しで使い勝手が大きく変わるため、困ったときはまずこのチェックポイントを振り返ってみると、問題解決の糸口がつかみやすくなります。

まとめ

まとめ
まとめ

この記事では、Laravelでログを出力する方法を体系的に学びました。まずLaravelのログ機能は、Monolog(モノログ)というPHPの有名なライブラリを利用しており、storage/logsフォルダに記録される仕組みを理解しました。

「single」「daily」といったログの管理方法を切り替えることで、初心者でも扱いやすく、実際の開発現場でも柔軟に使えることが分かりました。また、Log::info()Log::error()といったシンプルな書き方で、エラーや処理内容を記録できることも確認しました。

ログレベルを使い分けることで、重要度ごとの記録が可能になり、トラブル発生時にもすばやく原因を見つけられます。さらに、ログに「コンテキスト情報」を追加することで、ユーザーIDやリクエストデータを一緒に保存でき、実際のアプリ運用に役立ちます。

Monologのハンドラを使ったカスタム設定をすれば、Slack通知や専用ファイルへの出力なども可能です。トラブルシューティングのコツとしては、権限確認やdailyドライバの活用、フォーマットのカスタマイズなどが挙げられます。

下記にサンプルとして、記事全体を振り返る形で整理したコードを紹介します。

サンプルプログラム(まとめ版)


use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Route;

Route::get('/summary', function () {
    // 通常のログ出力
    Log::info('まとめページにアクセスがありました');

    // エラー発生の記録
    Log::error('テスト用エラーログ');

    // ユーザーIDを含めたコンテキスト付きログ
    Log::info('ユーザーログイン', ['user_id' => 123]);

    // 特定チャンネル(daily)に警告を出力
    Log::channel('daily')->warning('日別ログに警告を出力しました');

    return 'まとめ確認ページ';
});

このように、Laravelのログ出力はただのエラー記録にとどまらず、アプリの状態を可視化し、改善や保守を効率化する大切な仕組みです。特に初心者の段階から正しくログを理解し活用できれば、開発力やトラブル対応力を大きく高めることができます。

先生と生徒の振り返り会話

生徒

「先生、Laravelのログって最初は難しそうに感じたけど、まとめを読んだら意外と簡単に使えるんですね!」

先生

「そうですね。MonologをLaravelがうまくラップしてくれているので、初心者でもLog::info()などのシンプルな書き方ですぐに使えるんですよ。」

生徒

「ログレベルっていうのも便利ですね。debugとかinfoとか、重要度で分けて出せるのは実務で役立ちそうです!」

先生

「その通りです。さらにユーザーIDやリクエスト情報を記録しておけば、エラーの原因を探すときに強力な助けになります。」

生徒

「なるほど!トラブルがあっても、ログを見ればどこで何が起きたかすぐに分かりそうですね。」

先生

「その感覚が大事です。ログはアプリの健康診断みたいなもの。正しく残しておけば、問題解決も速くなりますし、品質向上にもつながりますよ。」

生徒

「これからLaravelを学ぶときは、エラーのときだけじゃなく普段からログを活用してみます!」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Laravelのログ出力はなぜ必要なのですか?初心者にもわかりやすく教えてください。

Laravelのログ出力は、エラーや処理の履歴を記録して、アプリケーションで「何が起こったか」を確認するために必要です。特に開発中や運用中に問題が発生したとき、Monologを使ってstorage/logsに保存されたログを確認することで原因を特定しやすくなります。初心者でも「トラブル解決のメモ帳」と考えると理解しやすいです。
関連記事:
カテゴリの一覧へ
新着記事
New1
CodeIgniter
CodeIgniterのコントローラクラスの作り方を完全ガイド!初心者でもわかる基礎から実践まで
New2
Symfony
Symfonyのフォームラベルを多言語対応!初心者でもわかる翻訳設定ガイド
New3
Laravel
Laravelでユーザー登録機能を作る方法!初心者向けにバリデーションとリダイレクトをやさしく解説
New4
CodeIgniter
CodeIgniterのコントローラとは?役割と基本構造を完全解説!初心者向けガイド
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのデータベース設定方法を完全ガイド!初心者でもわかる.envファイルの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravelのビューとは?Bladeテンプレートの基本を解説
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
No.5
Java&Spring記事人気No5
Laravel
Laravelでルーティングを設定する方法!web.phpと基本ルートの書き方を初心者向けに徹底解説
No.6
Java&Spring記事人気No6
Laravel
LaravelでルートをBladeテンプレートに記述する方法(route関数)
No.7
Java&Spring記事人気No7
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.8
Java&Spring記事人気No8
Laravel
Laravelのルートグループの使い方!初心者でもわかるprefixやミドルウェアの設定方法