gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 02:22:15 39 4
gpt4 key购买 nike

有什么方法可以将输出从 panic 重定向到一个文件,并为每个 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

最佳答案

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

因为错误也只是值,所以您可以在 panic 之前做一些事情。

举个简单的例子:

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")

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

在这里,您不应该在错误发生时立即 panic 。您可以在日志中写入更多信息。例如函数的参数或配置文件的值。

在记录器定义中使用正确的标志 log.Ldate|log.Ltime|log.Llongfile 您还将获得时间戳。

编辑:感谢 reticentroot 对恢复包装器的评论。文章Defer, Panic and Recover描述了一种如何处理 panic 的方法。这里可以使用 defer 恢复。

func main() {
myFunc()
fmt.Print(&buf)
}

func myFunc() {
defer func() {
if r := recover(); r != nil {
logger.Println("Recovered from panic: ", r)
}
}()
myPanic()
}

func myPanic() {
panic("Panicking in myPanic")
}

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

关于logging - 在 golang 中将 panic 输出重定向到带有时间戳的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42486194/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com