こんにちは、現役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を記載することによって、エラーログを吐く方法について解説しました。
エラーが起きた場合の処理を書くことも重要ですね。
読んでいただきありがとうございました。
安定したシステム解説を!!