与语言无关 - 如何确定要使用的日志级别



日志级别WARN,ERROR和FATAL非常清楚。但是什么时候调试,什么时候是信息?

我见过一些在 INFO 级别上令人讨厌的冗长项目,但我也看到过过于偏爱 DEBUG 级别的代码。在这两种情况下,有用的信息都隐藏在噪音中。

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

我认为没有任何硬性规定;使用 log4j 类型的级别,我的"经验法则"是这样的:

  • 致命:应用程序(或至少是一个线程)即将可怕地死亡。这就是解释为什么会发生这种情况的信息的地方。
  • 错误:应用正在执行的操作,而不应执行的操作。这不是用户错误("无效的搜索查询");这是一个断言失败,网络问题等,可能是将中止当前操作
  • 的问题
  • 警告:令人担忧但不会导致操作中止的内容;# 数据库池中的连接数变低、操作中异常但预期的超时等。我经常认为"WARN"在聚合中很有用;例如,grep,分组并对其进行计数,以了解影响系统运行状况的因素
  • INFO:正常日志记录是应用程序正常运行的一部分;诊断内容,因此您可以返回并说"这种广泛操作多久发生一次?"或"用户的数据是如何进入这种状态的?"
  • 调试
  • :默认关闭,能够打开以调试特定的意外问题。您可以在此处记录有关关键方法参数的详细信息,或者记录可用于查找代码的特定"问题"区域中可能出现的问题的其他信息。
  • TRACE:"说真的,WTF正在这里进行?!?!我需要记录我执行的每个语句,以便在我发疯之前找到这个@#$@ing内存损坏错误"

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

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

  • 调试 - 实际跟踪值
  • 信息 - 刚刚发生了一些事情 - 没有什么重要的,只是一个标志
  • 警告 - 一切正常,但有些事情与预期不符
  • 错误 - 发生了一些需要修复的事情,但我们可以继续并做其他(独立)活动
  • 致命 - 一个足够严重的问题,我们甚至不应该继续下去

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

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

失败警告是不言自明的。

我的团队的约定是在消息中计算某些内容时使用debug,而info用于纯文本。 所以实际上info会告诉你正在发生的事情,debug会告诉你正在发生的事情的价值。

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

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

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

为了避免信息过多,通常不建议在整个项目中启用跟踪级日志记录。 相反,使用"DEBUG"来查找有关错误及其发生位置的一般信息(因此得名),然后仅在您仍然无法弄清楚时为该组件启用 TRACE。

相关内容

  • 没有找到相关文章

最新更新