golang使用iris框架全局异常捕获

思路:通过设置recover可以实现异常自动回复功能,那么我们可以通过自定义recover去实现日志信息的返回

/**
* @Description: 错误信息处理
* @Author: guoyzh
* @Date: 2019/10/23
 */
func customRecover(ctx iris.Context) {
	defer func() {
		if err := recover(); err != nil {
			if ctx.IsStopped() {
				return
			}

			var stacktrace string
			for i := 1; ; i++ {
				_, f, l, got := runtime.Caller(i)
				if !got {
					break
				}
				stacktrace += fmt.Sprintf("%s:%d\n", f, l)
			}

			errMsg := fmt.Sprintf("错误信息: %s", err)
			// when stack finishes
			logMessage := fmt.Sprintf("从错误中回复:('%s')\n", ctx.HandlerName())
			logMessage += errMsg + "\n"
			logMessage += fmt.Sprintf("\n%s", stacktrace)
			// 打印错误日志
			ctx.Application().Logger().Warn(logMessage)
			// 返回错误信息
			ctx.JSON(core.GenFailedCodeMsg(serverErrorCode, errMsg))
			ctx.StatusCode(serverErrorCode)
			ctx.StopExecution()
		}
	}()
	ctx.Next()
}

使用自定义recover

app.Use(customRecover)
发布了200 篇原创文章 · 获赞 97 · 访问量 59万+

猜你喜欢

转载自blog.csdn.net/u010838785/article/details/102699933