gin 的默认启动方式为 debug 模式
gin.Default()
func Default() *Engine {
debugPrintWARNINGDefault()
engine := New()
engine.Use(Logger(), Recovery())
return engine
}
func Recovery() HandlerFunc {
return RecoveryWithWriter(DefaultErrorWriter)
}
func RecoveryWithWriter(out io.Writer) HandlerFunc {
...
}
var DefaultErrorWriter io.Writer = os.Stderr
所以在开发过程中,设置为debug
模式,所有的panic
都会被Recovery()
中间件捕获,并以标准错误的方式输出到终端。
但是在线上的时候,我们需要所有的panic都被捕获,并写入到日志文件,方便排查错误。
此时我们需要使用 RecoveryWithWriter
中间件,并传入一个 io.Writer
,也就是你打开着的日志文件句柄。
类似于这样:
gin.RecoveryWithWriter(logging.F)
其中F为我要写入的日志文件,并且已经被打开。
F, err = file.MustOpen(fileName, filePath)
所以,在启动服务的时候一般这样设置:
gin.SetMode(setting.GetRunMode())
// 初始化应用
if setting.GetRunMode() == "debug" {
GRouter = gin.Default()
} else {
GRouter = gin.New()
GRouter.Use(gin.RecoveryWithWriter(logging.F))
}