日志级别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。