关于错误提示的一点小想法

149 阅读2分钟

写程序很多年,对于错误控制却一直没做什么改进,
发生错误的时候,总是凭经验找到问题,然后解决问题,
经验丰富时,倒也没花太多时间,但最近换成用GO语言开发服务器端。
经验有点欠缺,不得不想办法优化一下错误提示。

这边把错误分为两种,
一种是用户级的,比如“用户名不能为空”“数据已被删除”之类的,
这种不在本文讨论范围,也不需要做什么优化。
另一种是服务器级别的,比如“数据库保存失败”“文件读取失败”,
两种错误得区别对待,这种需要写入日志,并且要有个合理的错误提示。

市面上常见的错误提示也有两种,
一种是 隐藏所有信息,只告诉用户“服务器出错了~”
另一种是直接把 只有程序员看得懂的 原始错误信息展示给用户,
显然都不合理。

更合理的错误提示:

  1. 得告诉用户出错了,比如“服务器错误,请截图联系客服。”
  2. 要能追踪到日志,也就是RequestID,方便从日志中找出问题所在。
    一个页面往往存在多个接口请求,日志里又记录了所有用户的错误记录。
    所谓的链路追踪,就是给每个请求都生成一个RequestID,写入日志的时候带上RequestID,
    输出错误的时候也得输出RequestID。
  3. 要包含简单的错误信息。方便简单问题快速处理。
    有些错误并不需要改动程序,比如目录没有写入权限,数据库连接失败等。
    只需要设置一下目录权限,启动一下数据库。

综上所述,我的错误提示的格式是这样:

fmt.Sprintf("服务器错误,请截图并联系客服。eid: %s, err: %s", reqId, err.Error())