12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package middleware
- import (
- "bytes"
- "fmt"
- "io/ioutil"
- "strings"
- log "app.yhyue.com/moapp/jylog"
- "github.com/gogf/gf/v2/errors/gcode"
- "github.com/gogf/gf/v2/errors/gerror"
- "github.com/gogf/gf/v2/net/ghttp"
- "github.com/gogf/gf/v2/net/gtrace"
- "github.com/gogf/gf/v2/os/gtime"
- "github.com/gogf/gf/v2/util/gconv"
- "jygit.jydev.jianyu360.cn/dataservice/tripartite_gateway/common/db"
- . "jygit.jydev.jianyu360.cn/dataservice/tripartite_gateway/common/gatecode"
- "jygit.jydev.jianyu360.cn/dataservice/tripartite_gateway/core/router"
- )
- // ErrorHandler 统一异常拦截、提醒,及日志打印中间件
- func ErrorHandler(r *ghttp.Request, routerManager *router.Manager) {
- r.Middleware.Next()
- _, span := gtrace.NewSpan(r.Context(), "ErrorHandler")
- defer span.End()
- // 程序异常信息处理
- err := r.GetError()
- if err != nil {
- gCode := gerror.Code(err)
- if gCode == gcode.CodeNil { // 非定义异常
- gCode = gcode.New(int(GLOBAL_ERR_ERR), GLOBAL_ERR_ERR.String(), err.Error())
- }
- appid := r.GetQuery("appid").String()
- log.WithContext(r.Context()).Errorln(appid, r.URL.Path, gCode.Code(), gCode.Message(), gCode.Detail())
- reqBody, _ := ioutil.ReadAll(r.Body)
- r.Body = ioutil.NopCloser(bytes.NewReader(reqBody))
- error_msg := gCode.Message()
- log_error_msg := ""
- if strings.Contains(error_msg, "%s") {
- error_msg = fmt.Sprintf(error_msg, gCode.Detail())
- log_error_msg = error_msg
- } else {
- log_error_msg = error_msg
- if gCode.Detail() != "" {
- log_error_msg += "," + gconv.String(gCode.Detail())
- }
- }
- router, rErr := routerManager.GetRouterRule(r.URL.Path)
- if appid != "" && rErr == nil && router.Price > 0 {
- header := fmt.Sprintf(`{"timestamp":%s,"sign":"%s"}`, r.GetHeader("timestamp"), r.GetHeader("sign"))
- var surplus int64
- if gCode.Code() == int(GLOBAL_ERR_NOBALANCE) {
- surplus = gconv.Int64(gCode.Detail())
- }
- db.GateWatMySql.InsertBatch("thirdparty.log", []string{"appid", "url", "header", "param", "price", "surplus", "error_code", "error_msg", "ip", "create_time"}, []interface{}{appid, router.ReqUrl, header, string(reqBody), router.Price, surplus, gCode.Code(), log_error_msg, r.GetClientIp(), gtime.Now().String()})
- }
- //返回固定的友好信息
- r.Response.WriteJson(map[string]interface{}{
- "error_code": gCode.Code(),
- "error_msg": error_msg,
- })
- r.Response.ResponseWriter.Flush()
- }
- }
|