Log::debug();でArray to string conversionになって詰まった話。


Laravelを触っていてログに出力したい時があると思います。
この変数の中身はきちんと想定している変数の値が入っているのか、とか、配列がどのようにして入っているのか、など。
そういったことを確認する時に、Log::debug();で出力することがかなりあります。
今回はその時にミスったことを備忘録としてまとめていこうと思います。

脱線するのですが、Log::debug();で出す時に、ぜひ初心者の方におすすめしたいのですが、文字連結を用いて、メッセージ付きで今出そうとしているものの説明をつけておいたほうがいいと思います。

例としては、

publick function example (){
    $intArray = array(1,2,3,4,5);
    Log::debug("Value of $intArray in example", $intArray);
}

のように、配列の値を出力する時にや、変数の値を出力する時には、必ずメッセージを付けて出力しましょう。

いやいやちょっと待てよ

数日前のワイ「確かに、いろいろLogを仕込んで置く時にメッセージをつけないと、何の値が出力されたのかわからないからつけるんでしょ。
だったら今出力しようとしているところ以外すべてコメントアウトしておけばいいじゃないか。
そうすれば迷わなくないか。
そもそも、いまこれ以外のLogコメントアウトしてあるからやる必要なくないか。

ということを職場の先輩に行った時に、

先輩「今はそうかも知れないけれども、大規模なサービスになった時にLogをこうやって仕込まないと訳わかんなくなるよ。」

ワイ「なるほど!!!。わかりました!!!」

話を戻します。

このエラーが起きた時に、書いたコードはこういったふうにやりました

Log::debug('Value of $clientsInfo in clientsController@index'. $clientsInfo);

このコードをいざ実行しようとした結果、タイトルのエラーになってしまいました。
このLog::debug();で出力しようとしている$clientsInfoは配列です。
ということは、感の言い方ならもう気づいたかと思います。

文字連結をする時に、ピリオド(.)ではなくカンマ(,)でないと、文字列と配列の連結をするときはうまく行かないのです。

まとめ

文字列と配列を連結させてLogに出力したい場合は、

Log::debug("message",変数);

のように、カンマ(,)を使わないといけない。

ピリオドを文字列と配列で使ってしまうと、

Array to string conversion

になってしまうので注意が必要。

もう一つが、Log::debug();で出力してデバッグをするなら、必ずメッセージを付けること。
になります
ありがとうございました。