有不同的方式记录消息,按死亡顺序排列:

致命的错误警告信息调试,调试跟踪

我如何决定何时使用哪个?

什么是好的启发式方法?


当前回答

塔科·扬·奥辛加的回答非常好,而且非常实用。

我同意他的观点,尽管有些不同。

在Python上,只有5个“命名”日志级别,所以我是这样使用它们的:

调试——对故障排除很重要的信息,通常在正常的日常操作中被抑制信息——日常操作,作为程序按设计执行功能的“证明”警告——超出名义但可恢复的情况,*或*遇到可能导致未来问题的事情错误——发生了一些需要程序执行恢复的事情,但恢复成功。不过,程序可能没有处于最初预期的状态,因此程序用户需要进行调整关键——发生了无法挽回的事情,程序可能需要终止,以免每个人都生活在罪恶的状态中

其他回答

可以从中恢复的警告。错误你不能。这是我的启发,其他人可能有其他想法。

例如,假设您在应用程序中输入/导入名称“Angela Müller”(注意u上的元音变音)。您的代码/数据库可能仅为英文(尽管它可能不应该在这个时代),因此可能会警告所有“不寻常”字符都已转换为普通英文字符。

与之形成对比的是,尝试将信息写入数据库,并连续60秒返回网络关闭消息。这与其说是警告,不如说是错误。

我的两分钱关于致命和跟踪错误日志级别。

ERROR(错误)是指发生某些FAULT(异常)时。

致命实际上是双重故障:在处理异常时发生异常。

web服务很容易理解。

请求来了。事件记录为INFO系统检测到磁盘空间不足。事件记录为警告调用某个函数来处理请求。当处理被零除时。事件记录为ERROR调用Web服务的异常处理程序来处理除以零的操作。Web服务/框架将发送电子邮件,但无法发送,因为邮件服务现在处于脱机状态。第二个异常无法正常处理,因为Web服务的异常处理程序无法处理异常。调用了不同的异常处理程序。事件记录为致命

TRACE是我们可以跟踪函数入口/出口的时间。这与日志无关,因为此消息可以由某些调试器生成,而您的代码根本没有调用日志。因此,非来自应用程序的消息被标记为TRACE级别。例如,使用strace运行应用程序

因此,通常在程序中,您会进行DEBUG、INFO和WARN日志记录。只有当你正在编写一些web服务/框架时,你才会使用FATAL。当您调试应用程序时,您将从这种类型的软件获得TRACE日志记录。

在此之前,我已经构建了以下系统:

错误-表示出现了严重错误,特定线程/进程/序列无法继续。需要一些用户/管理员干预警告-有些事情不正确,但过程可以照常进行(例如,一组100个作业中的一个作业失败,但剩余的作业可以处理)

在我所构建的系统中,管理员都在接受指示,以应对错误。另一方面,我们将观察警告,并确定每种情况是否需要任何系统更改、重新配置等。

错误是一种错误的东西,很明显是错误的,没有办法解决它,它需要被修复。

警告是一种模式的信号,这种模式可能是错误的,但也可能不是。

话虽如此,但我无法提出一个警告的好例子,这不是一个错误。我的意思是,如果您遇到了记录警告的麻烦,那么不妨解决根本问题。

然而,像“sql执行时间过长”这样的情况可能是一个警告,而“sql执行死锁”是一个错误,所以可能毕竟存在一些情况。

我完全同意其他人的观点,并认为GrayWizardx说得最好。

我所能补充的是,这些级别通常对应于它们的字典定义,所以这并不难。如果有疑问,请像拼图一样对待它。对于您的特定项目,考虑您可能想要记录的所有内容。

现在,你能找出什么可能是致命的吗?你知道什么是致命的,不是吗?那么,你的清单上哪些项目是致命的。

好的,这是致命的问题,现在让我们看看错误。。。冲洗并重复。

在“致命”以下,或者可能是“错误”以下,我建议信息多总比信息少好,所以错误“向上”。不确定是信息还是警告?然后发出警告。

我确实认为,致命和错误应该是我们所有人都清楚的。其他的可能更模糊,但可以说,把它们弄对并不那么重要。

以下是一些示例:

致命-无法分配内存、数据库等-无法继续。

错误-没有回复消息、事务中止、无法保存文件等。

警告-资源分配达到X%(例如80%)-这表明您可能需要重新调整维度。

信息-用户登录/注销、新事务、文件装箱、新d/b字段或删除的字段。

内部数据结构的调试转储,任何带有文件名和行号的跟踪级别。跟踪-操作成功/失败,已更新d/b。