记录何时是错误致命的?

时间:2008-11-24 03:30:23

标签: logging error-handling log4net log4j

在日志框架中,例如log4j& log4net您可以记录各种级别的信息。大多数级别都有明显的意图(例如“调试”日志与“错误”的对比)。但是,我一直胆怯的一件事就是将我的日志记录分类为“致命”。

哪种类型的错误如此严重以至于它们应归类为致命错误?虽然这只是一些案例驱动,但在决定将异常记录为致命或仅仅是错误时,您使用的一些经验法则是什么?

4 个答案:

答案 0 :(得分:36)

我认为当您的应用程序无法执行任何有用的工作时会发生致命错误。非致命错误是指出现问题但您的应用程序仍可继续运行,即使在功能或性能降低的情况下也是如此。

致命错误的例子包括:

  • 日志记录设备上的磁盘空间不足,您需要继续记录。
  • 客户端应用程序中网络连接的完全丢失。
  • 如果无法使用默认值,则缺少配置信息。

非致命错误包括:

  • 由于某种原因单个会话失败但仍可以为其他客户端提供服务的服务器。
  • 如果可以建立新会话,则会出现间歇性错误,例如会话丢失。
  • 如果可以使用默认值,则缺少配置信息。

答案 1 :(得分:6)

如果缺少某些内容或发生应用程序无法继续的情况,则错误是致命的。可能的示例是缺少必需的config.file或者异常“冒泡”并被未处理的异常处理程序捕获

答案 2 :(得分:2)

如果我的下一步是申请终止,或者根本不再做任何后续工作,我会使用致命的。如果应用程序是批处理的一部分或者有多个进程正在运行,这对于跟踪发生的事情非常有用。

如果有可能恢复(例如,暂时重试失去网络连接),我不会使用致命的。

如果我有一个由主线程激活的多个服务线程,其中一个因为一些输入错误而失败但是应用程序仍然可以提供新的请求,我认为这不是致命的。

答案 3 :(得分:1)

为了使这个答案简短而甜蜜,如果您的应用程序崩溃,我会认为这是致命的。如果您无法连接到重要资源(如数据库或所需服务),那将是致命的。总的来说,我会说,如果它使您的应用程序无法正常运行并影响用户,我会将其归类为致命错误。

但是,对错误进行分类的最重要方法是始终遵循经验法则,例如C++ Coding Standards中的规则69:

  

“在设计初期制定切实,一致,合理的错误处理政策,然后坚持下去。”