
Laravelで画面遷移時で画面ログを出す方法やある処理を実行したときのデータログを出力させたい時にどうすればいいんだろう…?
こんな疑問を解決します。
この記事では以下のように画面ログやデータログを出力させることをゴールとします。
[2021-10-23 11:54:19] local.INFO: 出力画面: 本の一覧画面, 結果: 表示成功
[2021-10-24 13:33:31] local.INFO: 出力箇所: 本の登録処理, 動作: リクエストデータ
[2021-10-24 13:33:31] local.INFO: array (
'book_name' => 'ログテスト',
'user_id' => '1',
'category_id' => '1',
'book_min_price' => '100',
'book_max_price' => '1000',
)
ログの出力をアプリに実装しておけば、どこまで処理ができているのかわかります。
ぜひ参考にしてください。


動作環境・前提
Docker 20.10.7
PHP 7.4.22
Laravel 8.53.1
mySQL 5.7
データベースのツール phpmyadmin
また、ログ関連のロジックはapp\Services\logService.phpを作成して、そこに記述していきます。



そもそもLaravelでログを出力させるには?やログ出力のロジックはserviceクラスに書いていくので、Laravelでserviceクラスの作成手順などがわからないって方は、以下の記事を参考にしてください。




画面遷移時に画面ログを出力させる
画面のログを出力するロジック
<?php
namespace App\Services;
use Illuminate\Support\Facades\Log;
/**
* ログ関連サービス
*/
class LogService
{
/**
* 画面ログの出力を行う
*
* @param string $view 画面・処理名
* @param string $action 動作・挙動 成功/失敗
*/
public function screenLog($view, $action)
{
$result = '出力箇所: '.$view.', 動作: '.$action;
Log::info($result);
}
}
コントローラーで呼び出す
<?php
namespace App\Http\Controllers;
use App\Models\Book;
use Illuminate\Support\Facades\Log;
use App\Services\logService;
class BookController extends Controller
{
private $log;
public function __construct()
{
$this->book = new Book();
$this->log = new LogService();
}
/**
* 一覧画面
*/
public function index()
{
// 画面ログ
$this->log->screenLog('本の一覧画面', '表示成功');
// 本の一覧データを取得
$books = $this->book->findAllBooks();
return view('book.index', compact('books'));
}
本の一覧画面に遷移して、ログが表示されるか確認
[2021-10-23 11:54:19] local.INFO: 出力画面: 本の一覧画面, 結果: 表示成功
このように本の一覧画面に遷移したときにログが出力されました。
画面ログがあれば、どこまで処理が実行できているのか確認できるので、エラーを探すのに便利です。
リクエストのデータログを出力させる
登録処理でリクエストされたデータのログも出力させてみます。
/**
* リクエストデータログの出力を行う
*
* @param string $view 画面・処理名
* @param string $action 動作・挙動 成功/失敗
* @param string $data リクエストデータ
*/
public function requestLog($view, $action, $data)
{
$result = '出力箇所: '.$view.', 動作: '.$action;
Log::info($result);
// 配列
Log::info($data);
}
コントローラーで呼び出します。
/**
* 登録処理
*/
public function store(BookRequest $request)
{
// 画面ログ
$this->log->requestLog('本の登録処理', 'リクエストデータ', $request->all());
return redirect()->route('book.index');
}



$request->all()とすることで、フォームでリクエストした内容を全て取得できます。
画面ログとリクエストデータも出力できました。
[2021-10-24 13:33:31] local.INFO: 出力箇所: 本の登録処理, 動作: リクエストデータ
[2021-10-24 13:33:31] local.INFO: array (
'book_name' => 'ログテスト',
'user_id' => '1',
'category_id' => '1',
'book_min_price' => '100',
'book_max_price' => '1000',
)
登録処理した際にDBのログを出力する
今度は登録処理した際に、データベースの値をログに出力させます。
/**
* 更新対象データ / 登録されたデータ 等のDBのデータをログに出力
*
* @param string $view 画面・処理名
* @param string $action 動作・挙動 成功/失敗
* @param mixed $data 出力するデータ
*/
public function dbDataLog($view, $action, $data)
{
$result = '出力箇所: '.$view.', 動作: '.$action;
Log::info($result);
// toArratせず出力すると、ユニコード変換されてしまうため。
Log::info($data->toArray());
}



$registerBookは登録処理になります。
/**
* 登録処理
*/
public function store(BookRequest $request)
{
// 画面ログ
$this->log->requestLog('本の登録処理', 'リクエストデータ', $request->all());
// リクエストされた本の名称
$bookName = $request->book_name;
// リクエストされたデータを元に登録処理を実行
$registerBook = $this->book->InsertBooK($request);
// データログ
$this->log->dbDataLog('本の登録処理', 'データ登録成功', $registerBook);
return redirect()->route('book.index');
}
このように登録処理に成功したときに、データベースに登録した値をログに出力できました。
[2021-10-24 13:54:44] local.INFO: 出力箇所: 本の登録処理, 動作: データ登録成功
[2021-10-24 13:54:44] local.INFO: array (
'user_id' => '1',
'category_id' => '1',
'book_name' => 'テストデータログ',
'book_min_price' => '100',
'book_max_price' => '500',
'image_file_path' => NULL,
'updated_at' => '2021-10-24T04:54:44.000000Z',
'created_at' => '2021-10-24T04:54:44.000000Z',
'book_id' => 26,
)
【まとめ】画面ログやデータのログを出力させる方法
今回は、画面ログやデータログの出力について解説しました。
アプリを開発しているときにエラーの原因を探しやすくするので、ぜひ参考にしてみてください。
このブログでは他にも実務で役立つLaravelの記事を書いているので、合わせてチェックしてくださいね!
コメント