2013-10-28 10 views
35

log.go (लॉग पैकेज के कार्यान्वयन) से:मुझे fmt.Println के बजाय log.Println का उपयोग क्यों करना चाहिए?

167 // Println calls l.Output to print to the logger. 
168 // Arguments are handled in the manner of fmt.Println. 
169 func (l *Logger) Println(v ...interface{}) { l.Output(2, fmt.Sprintln(v...)) } 

log.Printlnfmt.Sprintln के लिए सिर्फ एक समारोह आवरण है, कारण है कि मैं यह fmt.Println या fmt.Sprintln के बजाय इस्तेमाल करना चाहिए?

कोई व्यावहारिक कारण?

उत्तर

52

दो बातें अलग हैं: पैकेज लॉग के माध्यम से

  1. मुद्रण समवर्ती goroutines (जो सादे fmt नहीं है)

  2. लॉग स्वचालित रूप से समय जानकारी जोड़ सकते हैं से सुरक्षित है।

तो ये दो पूर्ण अलग-अलग चीजें हैं। लॉगिंग के लिए लॉग और fmt स्वरूपण के लिए है। (ठीक है, लॉग एक ही क्रियाओं और झंडे का उपयोग करता है, लेकिन यह सिर्फ सुविधाजनक है)।

+0

मुझे टाइमस्टैम्प की वजह से लॉग पसंद है। लॉग का उपयोग करने का नकारात्मक पक्ष यह है कि यह हमेशा stderr को लिखता है। – rem7

+9

@ rem7 यह * os.Stderr' को * डिफ़ॉल्ट * पर लॉग करता है। किसी भी 'io.Writer' को भेजने के लिए बस [' log.SetOutput'] (https://golang.org/pkg/log/#SetOutput) को कॉल करें (जो कि 'बाइट्स भी हो सकता है। बफर')। –

+5

कृपया, क्या आप समवर्ती goroutines से 'लॉग सुरक्षित है' के लिए कोड उदाहरण जोड़ सकते हैं – bsbak

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