😫
Goで「予期せぬエラー」(panic)をファイルに記録する方法
Goではlog.SetOutput()
でログの出力先をファイルに指定できますが、log.Println()
等で明示的に記録できないGoそれ自体のエラー(goroutineの並行処理が実行できない等)は記録されません。
しかしGo 1.23からdebug.SetCrashOutput()
方法で記録できるようになりました。
func main() {
f, err := os.Create("crash.txt")
if err != nil {
panic(err) // note there is a bit of a catch-22 here
}
debug.SetCrashOutput(f, debug.CrashOptions{})
panic("oh no!")
}
Discussion