将panic输出重定向到golang中带有时间戳的文件

时间:2017-02-27 12:47:46

标签: logging go panic

是否有办法将恐慌输出重定向到每个恐慌时间戳的文件。

恐慌日志文件的当前示例结果:

goroutine 6 [running]:
_/C_/....func·001(0x11691e80, 0x1a, 0x0, 0x0, 0x10d3550, 0x11691ec0, 0x0, 0x0)
C:/.../Logger.go:309 +0x47
path/filepath.Walk(0x11691e80, 0x1a, 0x1161defc, 0x0, 0x0)
c:/...../path.go:392 +0x97
_/C_/...../Logger.Sample(0x1168ac00, 0x59, 0x0, 0x0)
C:/...../Logger.go:322 +0x1c5
main.handleFileActions()
C:/...../main.go:453 +0x2ad
created by main.main
C:/..../main.go:278 +0x6ea

预期结果:

2017-02-27T14:24:22.627Z - goroutine 6 [running]:
_/C_/....func·001(0x11691e80, 0x1a, 0x0, 0x0, 0x10d3550, 0x11691ec0, 0x0, 0x0)
C:/.../Logger.go:309 +0x47
path/filepath.Walk(0x11691e80, 0x1a, 0x1161defc, 0x0, 0x0)
c:/...../path.go:392 +0x97
_/C_/...../Logger.Sample(0x1168ac00, 0x59, 0x0, 0x0)
C:/...../Logger.go:322 +0x1c5
main.handleFileActions()
C:/...../main.go:453 +0x2ad
created by main.main
C:/..../main.go:278 +0x6ea

1 个答案:

答案 0 :(得分:0)

可以在日志文件中添加时间戳。

因为错误也只是值,所以你可以在恐慌之前做点什么。

只是一个简单的例子:

mysql

https://play.golang.org/p/g4mweH4Dex

一旦发生错误,您不应该发生恐慌。您可以在日志中写入更多信息。例如,函数的参数或配置文件的值。

使用记录器定义var buf bytes.Buffer logger := log.New(&buf, "logger: ", log.Ldate|log.Ltime|log.Llongfile) logger.Print("Error when calling that code") fmt.Print(&buf) logger.Panic("Error") 中的正确标记,您还将获得时间戳。

编辑: 感谢reticentroot关于恢复包装器的评论。文章Defer, Panic and Recover描述了如何处理恐慌的方法。在这里,您可以使用延迟恢复。

log.Ldate|log.Ltime|log.Llongfile

https://play.golang.org/p/8swGF1SoO_