在开发中型项目时,如何识别,创建和维护错误代码?
我一生都无法想到一种简单而干净的方法。我的一些想法将类名和方法名转换为整数字符串,但这是很长的时间,因为方法名和类名可能会更改(希望不会!)。其他人只是使用递增日志系统(即,当我创建新的错误消息时,只需在最后一个错误消息ID上加1)。但这完全是无组织的。
更具体地说,我正在谈论错误代码,例如:
Error 401 Unauthorized.
在开发中型项目时,如何识别,创建和维护错误代码?
我一生都无法想到一种简单而干净的方法。我的一些想法将类名和方法名转换为整数字符串,但这是很长的时间,因为方法名和类名可能会更改(希望不会!)。其他人只是使用递增日志系统(即,当我创建新的错误消息时,只需在最后一个错误消息ID上加1)。但这完全是无组织的。
更具体地说,我正在谈论错误代码,例如:
Error 401 Unauthorized.
Answers:
没有。
错误代码是不合时宜的,它们源于过去的日子,当时的输出确实非常困难且昂贵,并且指示错误情况的唯一方法可能是通过一堆前面板灯:
如今,几乎每种主流语言都内置了成熟的异常处理功能。用它。向用户提供可以使用的信息;不要用技术之类的东西打扰他们,而要大致告诉他们出了什么问题以及他们可以怎么做。对于日志记录,只需给您的例外提供描述性名称,然后记录该名称。使用grep或类似的搜索工具更容易记住,也更容易找到。
当然,例外是,当您针对输出仍然困难且昂贵的情况(例如嵌入式系统或网络协议)进行编程时。HTTP仍然使用数字响应代码,因为它们非常容易有效地解析-在某些情况下,仅读取第一个数字已经可以告诉您足够的信息,而您可以丢弃其余的数据包。
您应该查看如何在常见协议(例如HTTP)中组织错误/状态代码。它们为不同类型的状态/错误保留不同的范围。这不仅使用户更容易识别未知状态代码,而且使开发人员可以为以前从未处理过的新型错误分配代码。
抱歉,为什么还要使用错误代码?
捕获异常,将其记录下来,并在程序无法恢复时主动发送报告。
(假设您的语言支持例外。)
唯一可能帮助您修复错误的相关信息是堆栈跟踪,您不会通过错误代码获得该跟踪。(我还假设您要对错误报告使用错误代码,而不是将其丢给用户。)
我将假定一个过程上下文(C)。如果有对象,则无论是否有异常,错误对象通常会更好。
您应该使用每个模块本地的错误代码。对于库,您可以使用一个特殊的标头列出错误代码,错误代码的编号为1、2等(或者,如果愿意,则为-1,-2)。确保始终返回这些代码之一,例如,翻译errno
成您自己的代码。如果您有多个模块层,请在每个步骤进行转换(或为更深层次的错误预定义一个范围,例如,值1001-1050来自该其他模块)。
提供将代码转换为字符串的方法也很重要。您永远不要只报告代码,这只会导致挫败感。实际上,应用程序中的几乎所有代码都应该带有字符串转换功能。例如,libc通常具有strerror
and strsignal
,但遗憾的是缺少strwaitstatus
。