最佳实践错误处理

时间:2011-02-03 08:53:42

标签: design-patterns language-agnostic error-handling

我想知道在C ++,Java,C#等编程语言中处理应用程序错误的最佳方法是什么。

我想创建一个存储与错误和警告消息相关的数字的地方。

例如:

10000 - > “无法读取文件”。 ... 20000 - > “缓冲区溢出”。 ... 80000 - > “关键的东西”。

我认为将错误与数字进行映射是一种很好的做法。无论显示哪种语言,都更容易找到错误。你们怎么看?还有更好的方法吗?

另一点是,如何存储它们,如何创建它们?

一个很棒的通用枚举是一个很好的解决方案吗?我们必须将它们存储在数据库中吗?在文件中?

应该是:

  • 很容易在代码中找到错误(即从数字中找到)。
  • 如果不在同一个地方,很容易添加新错误(两次使用相同的错误编号可能会很棘手)。

你们对这一切有什么看法?

提前感谢您的帮助和建议!

2 个答案:

答案 0 :(得分:6)

使用错误代码识别异常并不是一种不好的做法。

在生产环境中,保持日志文件更短,并且可用于国际化错误消息非常有用。

另一方面,在开发时,收到错误代码而不是带有意义描述的完整错误消息可能会很烦人。开发人员必须查看错误代码的内容。

在我的一个项目中(使用Java),我开发了一种混合方法。我的根异常有一个使用Enum类的构造函数。 Enum类包含错误代码列表+默认错误消息。类似的东西:

public enum ErrorCodes {

    VALIDATION_ERROR(5001, "One of the objects cannot be validated"),
    RESOURCE_NOT_FOUND(4004, "The requested resource does not exist"),

根异常还有其他构造函数,因此开发人员可以覆盖默认消息:

public CoreException(ErrorCodes _errorCode, final String message, final Throwable cause) {
   super(message, cause);
   errorCode = _errorCode.getCode();
}


public CoreException(ErrorCodes _errorCode, final String message) {
   super(message);
   errorCode = _errorCode.getCode();
}

当捕获异常时,异常处理程序可以决定(基于某些配置设置)仅记录错误和消息或错误。 更复杂的错误处理程序还可以根据错误代码从资源包中查找特定语言的消息。

答案 1 :(得分:0)

不要这样做。

我们有比C和FORTRAN更好的工具。

抛出异常并提供名称。 C#和Java将提供调用堆栈。

C ++可以告诉你异常的类型(只是勉强)