# go-learn **Repository Path**: ogreks/go-learn ## Basic Information - **Project Name**: go-learn - **Description**: go 二十一周学习作业 - **Primary Language**: Go - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-07-22 - **Last Updated**: 2023-11-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 第七周作业 我的思路是为了方便记录日志,统一通过gin的中间件去拦截返回响应状态,在返回的时候将error 绑定至 ctx 中 例如: ```go if err != nil { _ = ctx.AbortWithError(http.StatusInternalServerError, err) return } ``` 然后通过中间件拦截输出日志,使用zap输出console或者记录在文件日志中 并对包含error的结果统一输出 文件地址: * [loggerMiddleware](./pkg/ginx/middleware/logger/logger.go) * [logger](./pkg/logger/logger.go) 拦截示意: ```go if ctx.IsAborted() { for i := range ctx.Errors { multierr.AppendInto(&abortErr, ctx.Errors[i]) } // 替换错误响应 ctx.JSONP(http.StatusOK, gin.H{ "code": 500, "msg": "内部服务繁忙", "data": interface{}, }) } ``` 为了触发错误,我在服务 运行中断开了数据库连接以此触发error并附上效果图 ![error](./image/error.png)