是否有办法将恐慌输出重定向到每个恐慌时间戳的文件。
恐慌日志文件的当前示例结果:
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
答案 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