
LaravelのTraitを使ってログ出力を共通化したいんだけど、どうしたらいいのかな?
具体的なソースコードを交えて教えてほしいんだけど。。
こんな悩みを解決します。
- 本記事の内容
- Traitで開始・終了ログを共通化する方法
- 具体的なソースコード
- 本記事の執筆者
プロフィール


- 元エンジニア(歴7年)、資格保有数約20個(IT系以外も含む)
- 物販月利50万円⇒脱サラ
- 物販、システム開発、アフィリエイト、プログラミング、投資をやっています。
- 物販は彼女と楽しみながらやっています!
今回は、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」です。
コントローラでLogトレイトを呼び出す
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Interfaces\UserInterface;
use App\Traits\LogTrait;
class UserController extends Controller
{
use LogTrait;
private $userService;
public function __construct(UserInterface $userService)
{
$this->userService = $userService;
}
/**
* ユーザ情報全取得API
*
* @return 全ユーザ情報
*/
public function index()
{
$this->start();
$user = $this->userService->index();
$this->end();
return $user;
}
}
コントローラで開始・終了ログを出力するようにしました。
実際のログを見てみる
[2020-03-08 07:34:47] local.INFO: App\Http\Controllers\UserController index() start.
[2020-03-08 07:34:47] local.INFO: App\Http\Controllers\UserController index() end.
開始・終了ログが出力されていますね。
まとめ
今回は、Traitで開始・終了ログ出力を共通化してみました。
意外と簡単に実現できましたね。
ではまた!
- おすすめ本はこちら!



僕は↑の本でLaravelの勉強をしました!
非常に分かりやすいのでおすすめです!
- 自由な生き方がしたいなら!
自由な生き方をするためには、稼ぐスキルを身に付けなければなりません。
当サイト「リバトレ」では稼ぐスキルに関する情報を日々発信しているので、興味のあるものから見て頂ければ嬉しいです。
稼ぐスキルを身に付けよう!!
コメント