2017-02-01 7 views
8

ログファサードは非常に便利です。 laravelのドキュメントで : 緊急、アラート、クリティカル、エラー、警告、注意事項、情報およびデバッグ:オブジェクトをログに記録する方法は?

ロガーはRFC 5424で定義された8つのロギングレベルを提供します。

しかし、モデルのインスタンスをどのように記録すればよいですか?例えばのように:

$user= User::find($user_id); 

そして、$userオブジェクトをログに記録することは可能でしょうか?

答えて

1

最初のパラメータは、文字列(または文字列オブジェクト表現)でなければなりません。あなたは(生)データやオブジェクトの他のタイプを渡したい場合は、いつでもJSONは、それらをコードすることができ、そしてそのように、コンテキスト設定でそれらをプッシュする:

<?php 

$user = User::find($user_id); 

\Log::error("Something happened to User {$user_id}.", ['object' => $user->toJson()]); 

または:

<?php 

// User.php 
[...] 

class User 
{ 
    [...] 

    public function __toString() 
    { 
     return "{$this->id}"; 
    } 
} 

// [...] 
$user = User::find($user_id); 

\Log::error("Something happened to User {$user}.", ['object' => $user->toJson()]); 

メソッドシグニチャの詳細については、こちらをご覧ください。

13

これは機能しますが、モデル全体をログに記録するとかなり早くログが増えます。ますprint_r()メソッドの2番目のパラメータで

Log::info(print_r($user, true)); 

ログファサードは、文字列のようにそれを印刷することを可能にする、それを印刷するのではなく、情報を返します。

1

私は最近、Laravelの使用を開始しました。これは、5.3と5.4で動作します。以前のバージョンではうまくいきません。

私は(スーツ小さなオブジェクト)を考えることができる最も簡単な方法配列にオブジェクトをキャストするために、次のようになります。

Log::debug((array) $object); 

ヨデバッグ方法(だけでなく、この誤差の可能性、最初のパラメータですか不思議に思うかもしれません、予告Logクラスの他のロギングメソッド)はstringを最初のparamとして受け取り、配列を渡しています。

答えは、ログライタークラスの深いところにあります。そこメッセージのフォーマットをサポートするたびに呼び出される方法があり、それは次のようになります。

/** 
* Format the parameters for the logger. 
* 
* @param mixed $message 
* @return mixed 
*/ 
protected function formatMessage($message) 
{ 
    if (is_array($message)) { 
     return var_export($message, true); 
    } elseif ($message instanceof Jsonable) { 
     return $message->toJson(); 
    } elseif ($message instanceof Arrayable) { 
     return var_export($message->toArray(), true); 
    } 

    return $message; 
} 

またもう少し物事を明確にするために、あなたに見てとることができます。 https://github.com/laravel/framework/blob/5.4/src/Illuminate/Log/Writer.php#L199とあなたが表示されますformateMessageメソッドは毎回メッセージをフォーマットしています。

関連する問題