为什么我应该使用log.Println而不是fmt.Println?
问题描述:
From log.go (the implementation of the log package) :
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
is just a function wrapper for fmt.Sprintln
, why should I use it instead of fmt.Println
or fmt.Sprintln
?
Any practical reasons ?
来自 log.go (日志包的实现): p>
167 // Println调用l.Output打印到记录器。
168 //以fmt.Println的方式处理参数。
169 func(l * Logger)Println(v ... interface {}){l.Output(2,fmt.Sprintln(v ...)) }
code> pre>
log.Println code>
只是 fmt.Sprintln code>的函数包装
,为什么我应该使用它而不是 fmt.Println code> a>或 fmt.Sprintln code>
吗? p>
有任何实际原因吗? p>
div>
答
Two things are different:
Printing via package log is safe from concurrent goroutines (while plain
fmt
isn't)Log can add timing information automatically.
So these are two completely different things. log is for logging and fmt
for formatting. (Okay, log uses the same verbs and flags, but that is just convenient).