为什么我应该使用log.Println而不是fmt.Println?


76

log.go(执行日志包):

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.Println只是一个函数包装器fmt.Sprintln,为什么我要用它代替fmt.Printlnor fmt.Sprintln

有实际原因吗?

Answers:


106

两件事不同:

  1. 通过包日志进行打印对于并发goroutine是安全的(而普通的fmt则不是)

  2. 日志可以自动添加计时信息。

因此,这是两件完全不同的事情。log用于记录和fmt格式化。(好吧,log使用相同的动词和标志,但这很方便)。


1
由于时间戳记,我喜欢Log。使用Log的缺点是它总是写入stderr。
rem7

16
@ rem7它记录到os.Stderr默认。只需调用log.SetOutput即可将其发送给任何人io.Writer(甚至可能是bytes.Buffer)。
Dave C

26
请您为log is safe from concurrent goroutines
bsbak

对于周围人的安全的讨论log,并fmt在够程,看到stackoverflow.com/questions/14694088/...
z11i
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.