T-file

一歩踏み出す勇気を全力で応援するブログ

【初心者向け】Laravelでエラーログを出力する方法【具体的な事案を交えて解説】

こんにちは、現役CTOのtakaです。

今回はLaravelにて、エラーログを記載してく方法について解説していきます。

正しい情報は公式にあるので、そちらも参考に!

エラーログを出力する方法

今回は、オンラインサービスでAコースまたはBコースを選べるページを作成することとしよう。
Coursesテーブルをマイグレーションで作成し、Courseモデルも作成している。(ここは省きます)

コースを選択できるページに遷移するために、CourseController.phpでcourse.blade.phpをレンダリングしようとしているところだ。

例えばこんな感じだ。

// CourseController.php
<?php
use App\Http\Controllers\Controller;
use App\Models\Course

class CourseController extends Controller
{
  public function index()
  {
    $Courses = Course::isValid()->get();
    return view('course')->with([
      'Courses' => $Courses,
    ]);
  }
}

コース選択画面でコースがない場合、システムとしてダメである。
なので、コースがない場合、エラーを吐くようにすると良い。

エラーを吐くようにするためにはまずLogファサードをuseし、このように記載すると良い。

// CourseController.php
<?php
use App\Http\Controllers\Controller;
use App\Models\Course
use Illuminate\Support\Facades\Log; // Logファサードをuse
// use Log; <-これでもいけるよ

class CourseController extends Controller
{
  public function index()
  {
    $Courses = Course::isValid()->get();
    if(!count($Courses)) {
      Log::error('コースが存在しません。'); // ログファサードを使用 引数はエラーメッセージ
    }
    return view('course')->with([
      'Courses' => $Courses,
    ]);
  }
}

これでCoursesテーブル内のデータが存在しない時に、エラーが吐かれるようになりました。

合わせて読みたい
【初心者向け】Laravelのログはどこで確認できるのか?

ステップアップ

エラーが吐くようになったが上記のコードの場合、本当にエラーだった場合フロントでは$Courseのforeachが出来なくなったりしエラー画面が出てしまう。
なのでステップアップとして、エラーの場合はフロントでエラーメッセージを出力するようにしましょう。

例えば、CourseController.phpをこんな感じに変更します。

// CourseController.php
<?php
use App\Http\Controllers\Controller;
use App\Models\Course
use Illuminate\Support\Facades\Log;

class CourseController extends Controller
{
  public function index()
  {
    $Courses = Course::isValid()->get();
    $errorMessage = null;
    if(!count($Courses)) {
      $errorMessage = 'コースが存在しません。';
      Log::error($errorMessage);
    }
    return view('course')->with([
      'Courses' => $Courses,
      'errorMessage' => $errorMessage,
    ]);
  }
}

そしてcourse.blade.phpにて、$errorMessageの有無で出力を分岐させます。


@section('content')
  @if(isset($errorMessage))
    <p>{{ $errorMessage }}</p>
  @else
    @foreach ($Courses as $Course)
    ・・・
    @endforeach
  @endif
@endsectoin

これでフロント側もコースがない場合に対応できましたね。

エラーが起きた時にslackに通知を送るなどの設定をしておくと、バグ早期発見に繋がりますね。

ログレベル

今回はLog:errorを紹介したが、ログレベルはこのように複数あります。
emergency、alert、critical、error、warning、notice、info、debug
※左に行くほど、緊急度が高い

それぞれの用途に合わせてログレベルを設定することが重要です。

まとめ

今回はlaravelにてLog:errorを記載することによって、エラーログを吐く方法について解説しました。
エラーが起きた場合の処理を書くことも重要ですね。

読んでいただきありがとうございました。
安定したシステム解説を!!