如何确定要使用的日志级别?

时间:2008-10-09 11:18:28

标签: language-agnostic logging verbosity

日志级别WARN,ERROR和FATAL非常清楚。但什么时候是DEBUG,什么时候是INFO?

我已经看到一些在INFO级别上令人烦恼的项目,但我也看到了过多地支持DEBUG级别的代码。在这两种情况下,有用的信息都隐藏在噪音中。

确定日志级别的标准是什么?

6 个答案:

答案 0 :(得分:109)

我认为没有任何严厉的规则;使用log4j类型级别,我的“经验法则”类似于:

  • 致命:应用程序(或至少是一个线程)即将死亡。这是解释为什么正在发生的信息的地方。
  • 错误:应用正在做的事情,它不应该。这不是用户错误('无效的搜索查询');这是一个断言失败,网络问题等等,可能会中断当前的操作
  • WARN :有关但不会导致操作中止的内容;数据库池中的连接数变低,操作中出现异常但预期的超时等。我经常将“WARN”视为聚合中有用的东西;例如grep,分组并计算它们以了解影响系统运行状况的信息
  • INFO :正常日志记录,是应用程序正常运行的一部分;诊断的东西,所以你可以回去说'这种广泛的操作发生的频率是多少?',或'用户的数据是如何进入这种状态的?'
  • DEBUG :默认情况下处于关闭状态,可以打开以调试特定的意外问题。您可以在此处记录关键方法参数的详细信息或其他有助于在代码的特定“有问题”区域中查找可能的问题的信息。
  • TRACE :“说真的,WTF正在这里?!?!我需要记录我执行的每一个语句,以便在我疯狂之前找到这个@#$ @ ing内存损坏错误”< / LI>

不是一成不变的,而是对我如何看待它的粗略想法。

答案 1 :(得分:7)

非正式地,我使用这种层次结构,

  • DEBUG - 实际跟踪值
  • INFO - 刚刚发生的事情 - 没什么重要的,只是一面旗帜
  • 警告 - 一切正常,但事情并不完全符合预期
  • 错误 - 发生的事情需要修复,但我们可以继续进行其他(独立)活动
  • 致命 - 一个我们不应该继续进行的严重问题

我通常会在记录INFO的情况下发布,但前提是我知道日志文件实际已经过审核(并且大小不是问题),否则就是WARN。

答案 2 :(得分:5)

考虑谁需要使用每个级别。 在我的代码中,我为开发人员输出保留 DEBUG ,例如输出只会帮助开发人员。 当需要大量信息时, VERBOSE 用于普通用户。 信息我用来正常显示重大事件(例如发送网页,检查重要内容)。

失败 WARN 非常自我解释。

答案 3 :(得分:3)

我的团队中的约定是在消息中计算某些内容时使用debug,而info用于纯文本。因此,实际上info将向您显示正在发生的事情,debug将显示正在发生的事情的值。

答案 4 :(得分:1)

我倾向于将INFO定位到用户,为他们提供甚至不是警告的消息。 DEBUG倾向于供开发人员使用,我输出消息以帮助跟踪代码中的流(也包含变量值)。

我还喜欢另一个级别的DEBUG(DEBUG2?),它提供了绝对桶装的调试信息,例如所有缓冲区的十六进制转储等等。

答案 5 :(得分:0)

不需要DEBUG2级别。这就是'TRACE'的用途。 TRACE旨在成为输出您可能希望看到的每条可能信息的绝对最低级别的日志记录。

为避免大量信息,通常不建议您在整个项目中启用跟踪级别日志记录。而是使用'DEBUG'来查找有关错误及其发生位置的一般信息(因此得名),然后如果仍然无法弄明白,则仅为该组件启用TRACE。