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

tar*_*lah 62 logging go

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...)) }
Run Code Online (Sandbox Code Playgroud)

log.Println仅仅是一个功能包装的fmt.Sprintln,我为什么要使用它,而不是fmt.Printlnfmt.Sprintln

任何实际的原因?

Vol*_*ker 84

有两件事是不同的:

  1. 通过包日志打印是安全的并发goroutines(平原fmt不是)

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

所以这些是完全不同的两件事.log用于记录和fmt格式化.(好吧,日志使用相同的动词和标志,但这很方便).

  • 请你能为`log is concurrent from concurrent goroutines`添加代码示例 (20认同)
  • @ rem7它通过*default*记录到`os.Stderr`.只需调用[`log.SetOutput`](https://golang.org/pkg/log/#SetOutput)将其发送到任何`io.Writer`(甚至可能是`bytes.Buffer`). (14认同)
  • 有关 goroutine 中“log”和“fmt”安全性的讨论,请参阅 /sf/ask/1028586191/ -标准输出 (6认同)
  • 我喜欢 Log 因为时间戳。使用 Log 的缺点是它总是写入 stderr。 (2认同)