【Laravel】stdClassの中身をログ出力する

こんにちは。今回はLaravelでstdClassをログ出力する方法を解説します。クエリビルダで値を出力する時に時々見かけるstdClassですが、そのままの形でログ出力するとエラーとなります。皆さん少しハマる箇所かと思うので記事にまとめました。

stdClassはどのような時に返される?

Laravelでクエリビルダーを使っていると「時々」見かけるstdClassという型のオブジェクトですがどのような時に返されるのかを理解しておきましょう。

クエリビルダのfirstメソッドなどでデータを1件だけ取得した場合にstdClassとして値が返されます。

stdClassはログ出力できない

stdClassをログ出力しようとすると文字列に変換できずに例外エラーとなります。

local.ERROR: Object of class stdClass could not be converted to string

jsonに変換してログ出力する

jsonに変換することでログ出力できるようになります。

		$user = \DB::table('users')->first();
		\Log::debug(json_encode($user));
local.DEBUG: {"id":"1","name":"joe","email":"joe@xxx.xxx","email_verified_at":null,"password":"","remember_token":null,"created_at":null,"updated_at":"2021-07-31 05:18:34","deleted_at":null}

ログが出力できました。しかし、整形されていないのですごく見づらいです。そこで見やすくするためにもうひと工夫しましょう。

jsonを配列に変換しログを見易くする

jsonを配列に変換してログ出力してみましょう。json_decode関数の第二引数にtrueを設定することで配列に変換できます。

		$user = \DB::table('users')->first();
		\Log::debug(json_decode(json_encode($user),true));
local.DEBUG: array (
  'id' => '1',
  'name' => 'joe',
  'email' => 'joe@xxx.xxx',
  'email_verified_at' => NULL,
  'password' => '',
  'remember_token' => NULL,
  'created_at' => NULL,
  'updated_at' => '2021-07-31 05:18:34',
  'deleted_at' => NULL,
)  

整形されて見やすくなりました。

まとめ

以上、stdClassをログに出力する方法でした。stdClassを一度jsonに変換してから配列に変換することで、整形されたログを出力することができます。変換するためにそれなりにコードを書かなくてはいけないので、モジュールにしておくと良いかもしれませんね。

Laravel

Posted by kobainmac