思路:通过设置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)