我知道我们可以使用log和打印变量或错误fmt.例如,如果我想打印变量,我可以这样做:
h := "world"
fmt.Printf("hello = %v\n", h)
log.Printf("halo = %v\n", h)
Run Code Online (Sandbox Code Playgroud)
输出将是:
hello = world
2016/12/30 09:13:12 halo = world
Run Code Online (Sandbox Code Playgroud)
并且通常在错误处理中我发现这样的日志
if err != nil {
log.Println("Error : something terrible happen -> ", err)
return err
}
Run Code Online (Sandbox Code Playgroud)
但从上面的情况我也可以fmt用来打印这样的错误
fmt.Printf("Error : something terrible happen -> %v\n",err.Error())
Run Code Online (Sandbox Code Playgroud)
使用fmt而不是log打印错误是一个好习惯吗?然后我总是使用fmt而不是log在调试时打印变量.
Cer*_*món 27
选择log和fmt使用这些事实:
log函数打印到标准错误默认情况下,可以直接到任意的作家.该fmt.Printf函数打印到stdout.log函数可以打印时间戳,源代码位置和其他信息.log函数fmt.Printf都是线程安全的,但是fmt.Printf依赖于OS的大小的并发写入可以是交错的.三个子问题的答案是"它取决于".
我想补充一点:
日志是线程安全的,而fmt不是.
Logger可以同时使用多个goroutine; 它保证序列化对Writer的访问.
如果您坚持使用 fmt.Print* 进行程序输出并使用 log.* 进行程序记录,通常不会遇到麻烦。
当然,如果您的程序没有“本地”输出(与大多数网络服务器程序一样),您可以使用两者进行日志记录,但对于日志记录 log.* 更加灵活和恰当。
| 归档时间: |
|
| 查看次数: |
11304 次 |
| 最近记录: |