Tech Starlog

Laravelログ出力

投稿日:2026/01/19

Laravelでは、アプリケーションの動作状況やエラー内容を記録するために、標準でログ機能が用意されています。
ログを正しく出力・管理することで、障害調査・運用監視・パフォーマンス改善が容易になります。

本記事では、Laravelのログ出力を解説します。


ログとは?

ログとは、アプリケーションの実行履歴や状態を記録した情報のことです。

主な用途は次のとおりです。

  • エラー発生時の原因調査
  • バッチ処理・API処理の実行履歴確認
  • 想定外の挙動の検知
  • パフォーマンス分析
  • 監査・証跡の保存

Laravelのログ保存先

storage/logs/laravel.log

※ 日次ローテーション設定の場合は、laravel-YYYY-MM-DD.logになります。


ログを出力する基本

サンプルコード

use Illuminate\Support\Facades\Log;

Log::info('処理を開始しました');
Log::warning('一部データが取得できませんでした');
Log::error('エラーが発生しました');

出力されるログ例

[2026-01-17 10:15:12] local.INFO: 処理を開始しました  
[2026-01-17 10:15:13] local.WARNING: 一部データが取得できませんでした  
[2026-01-17 10:15:14] local.ERROR: エラーが発生しました  

ログレベルの使い分け

レベル 用途
debug 開発時の詳細情報
info 正常処理の記録
warning 想定外だが継続可能
error 処理失敗・例外

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

サンプルコード

Log::info('ユーザー更新処理', [
    'user_id' => $user->id,
    'email'   => $user->email,
]);

出力されるログ例

[2026-01-17 10:20:01] local.INFO: ユーザー更新処理  
{"user_id":12,"email":"test@example.com"}

※ JSON形式で出力されるため、ログ検索や集計がしやすくなります。


例外をログに出力する

サンプルコード

try {
    $service->execute();
} catch (\Throwable $e) {
    Log::error('処理中に例外が発生しました', [
        'message' => $e->getMessage(),
        'trace'   => $e->getTraceAsString(),
    ]);
}

出力されるログ例

[2026-01-17 10:25:42] local.ERROR: 処理中に例外が発生しました  
{
  "message": "Undefined variable: price",
  "trace": "#0 /var/www/html/app/Service/SampleService.php:45 ..."
}

Artisan Command(バッチ)でのログ出力

サンプルコード

public function handle(): int
{
    Log::info('サンプル公開バッチ開始');

    try {
        $count = Sample::where('is_published', false)
            ->update([
                'is_published' => true,
                'published_at' => now(),
            ]);

        Log::info('サンプル公開バッチ完了', [
            'updated_count' => $count,
        ]);

        return Command::SUCCESS;

    } catch (\Throwable $e) {
        Log::error('サンプル公開バッチでエラー発生', [
            'exception' => $e,
        ]);

        return Command::FAILURE;
    }
}

出力されるログ例(正常時)

[2026-01-17 02:00:01] production.INFO: サンプル公開バッチ開始  
[2026-01-17 02:00:03] production.INFO: サンプル公開バッチ完了  
{"updated_count":120}

出力されるログ例(エラー時)

[2026-01-17 02:00:02] production.ERROR: サンプル公開バッチでエラー発生  
{
  "exception": "SQLSTATE[HY000]: Deadlock found when trying to get lock ..."
}

チャンネル別ログ出力

サンプルコード

Log::channel('batch')->info('バッチ専用ログを出力');

出力されるログ例(storage/logs/batch.log)

[2026-01-17 02:10:00] local.INFO: バッチ専用ログを出力

本番運用でのログ設計ポイント

✅ 出力ルールを統一する

  • 開始ログ
  • 終了ログ
  • 件数・処理結果
  • エラーログ

を必ず出すルールを決めておくと、運用が安定します。


✅ 個人情報・機密情報を出力しない

以下の情報はログに出力しないよう注意します。

  • パスワード
  • トークン
  • クレジットカード情報
  • 個人情報(住所・電話番号など)

✅ ログ容量の管理

ログが肥大化すると、ディスクを圧迫します。

  • 日次ローテーション
  • 保存期間の制限
  • 不要ログの削減

を設定しておくことが重要です。


✅ 開発環境と本番環境でログレベルを分ける

.envでログレベルを調整できます。

LOG_LEVEL=debug   # 開発環境
LOG_LEVEL=info    # 本番環境

まとめ

  • Laravelでは Log ファサードで簡単にログ出力できる
  • ログレベルを適切に使い分ける
  • コンテキスト情報を一緒に記録する
  • 例外時は必ずスタックトレースを残す
  • 本番運用を意識したログ設計が重要