この記事で解決できる悩み
いずみ
こんな悩みを解決できる記事を書きました!
僕は現役フリーランスエンジニア(歴9年)で、資格は13個保有しています。
結論、Traitで開始・終了ログ出力を共通化するのは簡単です。
本記事を読めば、LaravelのTraitで開始・終了ログ出力を共通化する方法が理解できるので早速見ていきましょう!
すぐ読み終わるので、ぜひ最後まで読んでくださいね♪
目次
LogTrait(ログトレイト)を新規作成
まずはTraitを作成します。
app直下にTraitsフォルダを作成します。
<?php
namespace App\Traits;
use Log;
trait LogTrait
{
/**
* 開始ログ
*/
public function start()
{
$caller = $this->fetchCaller();
Log::info("{$caller['class']} {$caller['function']}() start.");
}
/**
* 終了ログ
*/
public function end()
{
$caller = $this->fetchCaller();
Log::info("{$caller['class']} {$caller['function']}() end.");
}
/**
* 呼び出し元情報(クラス&メソッド)を取得する
*
* @return 呼び出し元情報
*/
private function fetchCaller(): array
{
$dbg = debug_backtrace();
return [
'class' => $dbg[2]['class'],
'function' => $dbg[2]['function'],
];
}
}
↑がログ出力を行うLogTrait.phpです。
Controller(コントローラ)でLogTrait(ログトレイト)を呼び出す
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Traits\LogTrait;
class HogeController extends Controller
{
use LogTrait;
public function index()
{
$this->start();
// 処理
$this->end();
}
}
↑のように、開始ログ・終了ログを出力します。
LogTrait(ログトレイト)のログ内容を確認
[2020-03-08 07:34:47] local.INFO: App\Http\Controllers\HogeController index() start.
[2020-03-08 07:34:47] local.INFO: App\Http\Controllers\HogeController index() end.
ログが出力されていればOKです。
まとめ
今回は、LaravelのTraitで開始・終了ログ出力を共通化する方法について解説しました。
意外と簡単でしたね。
- おすすめ本
Laravelの勉強なら「PHPフレームワーク Laravel入門 第2版
最後までお読みいただき、ありがとうございました!
- クソおすすめ本
海外のエンジニアがどういった思考で働いているかが理解できます。
海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。