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

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

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

什么是好的启发式方法?


当前回答

我建议只使用三个级别

致命-这会破坏应用程序。信息-信息调试-不太重要的信息

其他回答

正如其他人所说,错误是问题;警告是潜在的问题。

在开发中,我经常使用警告,在警告中,我可能会放置相当于断言失败,但应用程序可以继续工作;这使我能够发现这个案子是否真的发生过,或者这是我的想象。

但是的,它归结到恢复性和现实性方面。如果你能恢复,那可能是一个警告;如果它导致某个东西实际失败,那就是一个错误。

我一般同意以下约定:

跟踪-只有当我“跟踪”代码并试图找到函数的某一部分时。调试-对开发人员(IT、系统管理员等)以外的人有诊断帮助的信息。信息-要记录的一般有用信息(服务启动/停止、配置假设等)。我想随时提供信息,但在正常情况下通常不关心。这是我的开箱即用配置级别。警告-任何可能导致应用程序异常的情况,但我会自动恢复。(例如从主服务器切换到备份服务器、重试操作、丢失辅助数据等)错误-任何对操作(而不是服务或应用程序)致命的错误(无法打开所需的文件、丢失的数据等)。这些错误将迫使用户(管理员或直接用户)进行干预。这些通常是为不正确的连接字符串、丢失的服务等保留的(在我的应用程序中)。致命-强制关闭服务或应用程序以防止数据丢失(或进一步数据丢失)的任何错误。我只为最令人发指的错误和保证存在数据损坏或丢失的情况保留这些。

顺便说一句,我非常喜欢捕捉一切,然后过滤信息。

如果您在“警告”级别捕获,并希望获得与警告相关的一些调试信息,但无法重新创建警告,会发生什么情况?

捕获所有内容并稍后过滤!

即使对于嵌入式软件,这也是正确的,除非你发现你的处理器跟不上,在这种情况下,你可能需要重新设计你的跟踪以使其更高效,或者跟踪干扰了时间(你可能会考虑在一个更强大的处理器上调试,但这会带来另一种蠕虫)。

捕获所有内容并稍后过滤!!

(顺便说一句,捕获一切也很好,因为它让您可以开发工具来做更多的工作,而不仅仅是显示调试跟踪(我从中绘制了消息序列图,以及内存使用情况的直方图。它还为您提供了一个基础,以便在将来发生错误时进行比较(保留所有日志,无论是通过还是失败,并确保在日志文件中包含内部版本号))。

你想让系统管理员半夜起床吗?

是->错误无->警告

我建议采用Syslog严重级别:调试、信息、通知、警告、错误、严重、警报、紧急。看见http://en.wikipedia.org/wiki/Syslog#Severity_levels

它们应该为大多数用例提供足够的细粒度严重性级别,并被现有的日志解析器识别。当然,您可以根据应用程序的要求,自由地只实现一个子集,例如调试、错误、紧急情况。

让我们对已有多年的应用程序进行标准化,而不是为我们制作的每个不同应用程序制定自己的标准。一旦您开始聚合日志并尝试检测不同日志之间的模式,这将非常有用。