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

Laravelのログファイルの見方と保存先を徹底解説!storage/logsの使い方を初心者向けにガイド

Laravelのログファイルの見方と保存先の確認方法(storage/logs)
Laravelのログファイルの見方と保存先の確認方法(storage/logs)

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

生徒

「Laravelでエラーが出たときに原因を調べたいのですが、どこを見ればいいですか?」

先生

「そういうときはログファイルを確認するのが一番の近道です。Laravelは動いた記録をすべてファイルに残してくれていますよ。」

生徒

「ログファイルってどこにあって、どうやって読めばいいんですか?」

先生

「保存場所から読み方、自分でログを書き込む方法まで、順を追って説明しますね!」

1. ログファイルとは何か?なぜ大切なのか

1. ログファイルとは何か?なぜ大切なのか
1. ログファイルとは何か?なぜ大切なのか

プログラムを動かしていると、正常に動いているときも、エラーが起きたときも、さまざまな出来事が発生します。その出来事の記録を残したものがログファイルです。

ログとは「航海日誌」という意味の英語が語源で、船がどこを通ったかを記録するように、プログラムがどんな処理をしたかを記録するものです。たとえば「いつ」「どんなエラーが」「どのファイルの何行目で」起きたかといった情報が書き込まれます。

開発中に画面がエラーになったり、本番環境(実際にユーザーが使う環境)でおかしな動きがあったりしたとき、ログファイルを見ることで原因の手がかりをつかめます。ログファイルはプログラマーにとって「事件の目撃者」のような存在で、何が起きたのかをあとから確認するために欠かせないものです。

2. Laravelのログファイルの保存場所

2. Laravelのログファイルの保存場所
2. Laravelのログファイルの保存場所

Laravelのログファイルはstorage/logsというフォルダの中に保存されます。プロジェクトのルートフォルダ(プロジェクト全体の一番上の階層)から数えるとプロジェクト名/storage/logs/というパスになります。

パスとは、ファイルやフォルダがどこにあるかを示す住所のようなものです。

ログファイルのデフォルト(初期設定)のファイル名はlaravel.logです。設定によっては日付ごとにファイルが分かれてlaravel-2025-06-01.logのような名前になることもあります。このファイルをテキストエディタ(文字を編集するソフト)で開くと、ログの中身を確認できます。

ターミナル(文字を打ち込んでパソコンに命令する画面)を使って確認する場合は、以下のコマンドでログの最新の内容を表示できます。


// ターミナルで実行するコマンド(ログの最後の50行を表示する)
tail -n 50 storage/logs/laravel.log

tailはファイルの末尾を表示するコマンドで、-n 50は「最後の50行」という指定です。ログは新しいものほどファイルの下に追加されていくため、末尾を見ることで最新のエラー情報を確認できます。

3. ログファイルの中身の読み方

3. ログファイルの中身の読み方
3. ログファイルの中身の読み方

実際にログファイルを開くと、以下のような形式で記録されています。最初は英語ばかりで戸惑うかもしれませんが、構造を知ると読みやすくなります。


[2025-06-01 10:23:45] local.ERROR: SQLSTATE[HY000] [2002] Connection refused
{"exception":"[object] (PDOException(code: 2002):
    at /var/www/html/vendor/laravel/framework/src/...

ログの各行は基本的に日時・環境名・ログレベル・メッセージという構成になっています。

日時は[2025-06-01 10:23:45]のようにいつ起きたかを示します。その次のlocalは動作環境の名前(開発環境か本番環境かなど)です。ERRORの部分がログレベルと呼ばれるもので、そのメッセージがどの程度重要かを示します。そのあとにコロンで続くのが実際のエラーメッセージです。

ログレベルには重要度の高い順にemergencyalertcriticalerrorwarningnoticeinfodebugがあります。エラーを調査するときはまずERRORCRITICALのレベルのものを重点的に確認するとよいでしょう。

4. Logファサードを使って自分でログを書き込む方法

4. Logファサードを使って自分でログを書き込む方法
4. Logファサードを使って自分でログを書き込む方法

Laravelでは自分のコードの中にログを書き込む命令を入れることができます。これを使うと「ここでこんな処理が行われた」「このときの変数の中身はこれだった」という記録を自由に残せるため、バグを調べるときにとても役立ちます。

ログを書き込むにはLogファサードを使います。ファサードとはLaravelの便利な機能をシンプルに呼び出せる仕組みのことで、難しい内部処理を意識せずに使えるようにしてくれるものです。


<?php

namespace App\Http\Controllers;

use Illuminate\Support\Facades\Log;
use Illuminate\Http\Request;

class OrderController extends Controller
{
    public function store(Request $request)
    {
        $orderId = $request->input('order_id');

        // 注文IDをinfoレベルでログに記録する
        Log::info('注文処理を開始しました。注文ID: ' . $orderId);

        // 処理の途中で警告を記録する例
        if ($orderId > 9999) {
            Log::warning('注文IDが想定より大きい値です。ID: ' . $orderId);
        }

        return response()->json(['message' => '注文を受け付けました。']);
    }
}

Log::info()は情報として記録するメソッド、Log::warning()は警告として記録するメソッドです。このように処理の流れに合わせてログを仕込んでおくと、何か問題が起きたときにどこまで処理が進んでいたかを確認できます。

5. ログの設定ファイルとチャンネルについて

5. ログの設定ファイルとチャンネルについて
5. ログの設定ファイルとチャンネルについて

Laravelのログの動作はconfig/logging.phpという設定ファイルで管理されています。この中でログをどのように保存するかを決めるチャンネルという概念があります。チャンネルとは「ログをどのルートで、どんな形式で保存するか」を決めた設定のことです。

デフォルトのチャンネルは.envファイルのLOG_CHANNELという項目で指定されています。.envファイルとは、データベースの接続情報やアプリの動作設定をまとめた環境設定ファイルです。

よく使われるチャンネルの種類として、single(すべてのログを1つのファイルに書き込む)とdaily(日付ごとにファイルを分けて書き込む)があります。開発環境ではsingleでも問題ありませんが、本番環境ではdailyにしてファイルを日付で分けると管理がしやすくなります。


// .envファイルの設定例
// single: 1つのファイルにまとめて記録する
LOG_CHANNEL=single

// daily: 日付ごとにファイルを分けて記録する
LOG_CHANNEL=daily

dailyに設定すると、storage/logs/laravel-2025-06-01.logのように日付つきのファイル名で保存されます。古いファイルが自動的に削除されるようにLOG_DAILY_DAYSで保存日数を指定することもできます。

6. ログにコンテキスト情報を追加して詳しく記録する方法

6. ログにコンテキスト情報を追加して詳しく記録する方法
6. ログにコンテキスト情報を追加して詳しく記録する方法

ログにはメッセージだけでなく、配列(複数のデータをひとまとめにしたもの)の形で追加情報を一緒に記録することができます。これをコンテキストといいます。コンテキストを加えると「どのユーザーが」「どんな状況で」といった詳細をセットで残せるため、原因調査がさらにしやすくなります。


<?php

use Illuminate\Support\Facades\Log;

public function login(Request $request)
{
    $email = $request->input('email');

    // ログイン試行をコンテキスト付きで記録する
    Log::info('ログイン試行がありました。', [
        'email'      => $email,
        'ip_address' => $request->ip(),
        'user_agent' => $request->userAgent(),
    ]);

    // ログイン失敗時はerrorレベルで記録する
    if (!auth()->attempt(['email' => $email, 'password' => $request->input('password')])) {
        Log::error('ログインに失敗しました。', [
            'email' => $email,
        ]);
        return back()->withErrors(['email' => 'メールアドレスまたはパスワードが正しくありません。']);
    }

    return redirect('/dashboard');
}

Log::info()の第二引数(2番目に渡す値)に配列を渡すことで、ログファイルにはメッセージと一緒にその配列の内容も記録されます。$request->ip()はアクセス元のIPアドレス(インターネット上の住所のようなもの)を取得するメソッドです。このようにコンテキストを充実させておくことで、不正アクセスや不具合が起きたときの調査効率が大幅に上がります。

7. ログファイルが肥大化しないようにする管理のポイント

7. ログファイルが肥大化しないようにする管理のポイント
7. ログファイルが肥大化しないようにする管理のポイント

ログファイルはアプリが動き続けるほどどんどん内容が追加されていくため、放置するとファイルサイズがとても大きくなってしまいます。ファイルが大きくなりすぎるとサーバーのディスク容量(データを保存できる容量)を圧迫する原因になります。

この問題を防ぐためにLaravelにはdailyチャンネルを使って古いログを自動削除する機能があります。config/logging.phpの中でdaysという項目に日数を指定すると、その日数より古いログファイルは自動的に削除されます。


<?php

// config/logging.phpの設定例(dailyチャンネルの保存日数を設定)
'channels' => [
    'daily' => [
        'driver' => 'daily',
        'path'   => storage_path('logs/laravel.log'),
        'level'  => env('LOG_LEVEL', 'debug'),
        'days'   => 14, // 14日分だけ保持して古いものは自動削除
    ],
],

上記の設定では14日間分のログファイルを残し、それより古いものは削除されます。本番環境では不要なデバッグ情報がログに大量に記録されないよう、.envファイルのLOG_LEVELerrorwarningに設定しておくことも重要です。LOG_LEVELとは、どのレベル以上のログを記録するかを決める設定で、errorに設定するとエラー以上の重大なものだけが記録されます。開発中はdebugにして詳しく記録し、本番公開時には絞り込むというのが一般的な使い方です。

関連記事:
カテゴリの一覧へ
新着記事
New1
Laravel
Laravelのルート一覧を確認する方法!初心者でもわかるphp artisan route:listの使い方
New2
Laravel
Laravelでバリデーションを設定する方法(基本ルール編)
New3
Symfony
Symfonyで複数言語に対応するルーティングを設定する方法|初心者向け国際化(i18n)完全ガイド
New4
Laravel
Laravelでコントローラを作成する方法!基本のMVC構造を理解しよう
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelの環境別設定とは?local・productionの違いと.envの管理
No.2
Java&Spring記事人気No2
Laravel
Laravelでビューを表示する方法!Bladeテンプレートの使い方入門
No.3
Java&Spring記事人気No3
Laravel
Laravelでセッションを扱う方法!保存方法と利用例を解説
No.4
Java&Spring記事人気No4
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.5
Java&Spring記事人気No5
Symfony
Symfonyで言語ファイルを作成・管理する方法を完全解説!初心者でもわかるtranslationsディレクトリ入門
No.6
Java&Spring記事人気No6
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
No.7
Java&Spring記事人気No7
Symfony
Symfonyのローカリゼーションとは?i18n対応の基本を初心者向けに解説
No.8
Java&Spring記事人気No8
Symfony
Symfonyのインストール方法!CLIとComposerの導入手順まとめ