2017-02-01 13 views
8

मैं देख सकता हूं कि लॉग मुखौटा बहुत उपयोगी है। laravel की डॉक्स में:ऑब्जेक्ट लॉग कैसे करें?

लकड़हारा आठ लॉगिंग स्तर को आरएफसी 5424 में परिभाषित प्रदान करता है: आपातकालीन, चेतावनी, महत्वपूर्ण, त्रुटि, चेतावनी, नोटिस, जानकारी और डिबग।

लेकिन, मैं मॉडल के उदाहरण को कैसे लॉग करूंगा? जैसे उदाहरण के लिए:

$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()]); 

आप विधि हस्ताक्षर here के बारे में अधिक जानकारी प्राप्त कर सकते हैं।

13

यह काम करेगा, हालांकि पूरे मॉडल को लॉगिंग करने से आपका लॉग तेजी से बढ़ेगा।

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

सच विधि print_r() के दूसरे पैरामीटर में बजाय इसे मुद्रण की जानकारी है, जो एक स्ट्रिंग की तरह उसका प्रिंट ले लिए लॉग मुखौटा की अनुमति देता है देता है।

1

मैंने हाल ही में लार्वेल का उपयोग करना शुरू कर दिया है, इसलिए यह निश्चित रूप से 5.3 और 5.4 में काम करता है, जो पहले के संस्करणों के लिए निश्चित नहीं है।

तेज तरीका मैं के बारे में सोच सकते हैं (सूट छोटी वस्तुओं) सरणी वस्तु कास्ट करने के लिए होगा:

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

यो आश्चर्य हो सकता है कि यह कैसे संभव है, डिबग विधि के पहले परम है (और साथ ही त्रुटि, नोटिस और लॉग क्लास में अन्य लॉगिंग विधियां) स्ट्रिंग को पहले पैरा के रूप में स्वीकार करती हैं, और हम सरणी पास कर रहे हैं।

तो, उत्तर लॉग लेखक वर्ग में गहराई से जवाब देता है। वहाँ एक तरीका है कि हर बार जब संदेशों स्वरूपण का समर्थन करने के लिए कहा जाता है, और यह इस तरह दिखता है:

/** 
* 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 और आप देखेंगे वह फॉर्मेट मैसेज विधि हर बार संदेश स्वरूपित कर रही है।

संबंधित मुद्दे