😫

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

出典: logging - Capturing panic() in golang - Stack Overflow

Discussion