【问题标题】:Why should I use log.Println instead of fmt.Println?为什么我应该使用 log.Println 而不是 fmt.Println?
【发布时间】:2013-11-07 22:32:22
【问题描述】:

来自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.Printlnfmt.Sprintln

有什么实际原因吗?

【问题讨论】:

    标签: logging go


    【解决方案1】:

    有两点不同:

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

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

    所以这是两个完全不同的东西。 log 用于记录,fmt 用于格式化。 (好吧,log 使用相同的动词和标志,但这只是方便)。

    【讨论】:

    • 我喜欢 Log 因为有时间戳。使用 Log 的缺点是它总是写入 stderr。
    • @rem7 它通过默认记录到os.Stderr。只需致电log.SetOutput 将其发送到任何io.Writer(甚至可能是bytes.Buffer)。
    • 请您添加log is safe from concurrent goroutines的代码示例
    • 关于 goroutine 中 logfmt 安全性的讨论,请参阅 stackoverflow.com/questions/14694088/…
    猜你喜欢
    • 2016-05-23
    • 2018-05-10
    • 2014-03-12
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多