程序异常退出,如何通过Go语言捕获fatal错误?

这个问题我们可以通过对 Go 语言捕获错误的功能进行排查和整理。一般情况下,采用defer func(){recover() …} 类似的函数捕获程序中的错误,但是 recover() 函数在以下三种情况下是捕获不到对应的异常:

1.新运行了一个子协程,如果子协程中出现 panic 错误,是无法捕获的;
2.如果在程序中直接 os.Exit(0),对应的 defer 函数也不会运行,整个程序直接退出;
3.如果发生致命错误,recover() 无法捕获,例如以下的代码,并不能被捕获到。

运行过程中程序会直接出现一个致命异常,导致整个程序崩溃退出。

但是该种情况下,无法写入到日志,因此在程序运行中只有通过控制台才能看到对应的日志。针对此种情况,需要对代码进行处理。

在 Windows 系统中,修改的代码如下:

在 Linux 系统中,修改的代码如下:

main函数中调用代码

代码片段
1 行
elog.RedirectStderr()

最终如果出现 fatal 代码,就写入到 test-error.log 中

原创声明,本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
原文地址:https://cloud.tencent.com/developer/article/1902875#undefined
如有侵权,请联系 cloudcommunity@tencent.com 删除。