如何确定使用什么日志级别?
日志级别WARN,ERROR和FATAL非常清晰。 但是什么时候是DEBUG,什么时候INFO?
我已经看到一些在INFO级别上烦人的项目,但是我也看到了一些有利于DEBUG级别的代码。 在这两种情况下,有用的信息都隐藏在噪声中。
什么是确定日志水平的标准?
我不认为有任何硬性规定, 使用log4jtypes的层次,我的“经验法则”是这样的:
- 致命的 :应用程序(或至less是一个线程)即将死亡可怕。 这是解释为什么发生的信息。
- 错误 :应用程序正在做的事情,它不应该。 这不是用户错误('无效的search查询'); 这是一个断言失败,networking问题等,可能是一个将中止当前操作
- 警告 :有关的事情,但不会导致操作中止; 数据库池中的连接数量变less,操作中出现exception但预期的超时等等。我经常把'WARN'看作是有用的集合; 例如grep,group,然后计算它们以获得影响系统健康状况的图片
- INFO :正常的日志logging,是应用程序正常运行的一部分; 诊断性的东西,所以你可以回头说'这个广泛的操作发生的频率是多less',或者'用户的数据是如何进入这个状态的?
- DEBUG :默认closures,可以打开debugging特定的意外问题。 在这里,您可能会logging有关关键方法参数的详细信息或其他信息,这些信息有助于在代码的特定“有问题”的领域find可能的问题。
- TRACE :“说真的,WTF在这里发生了什么?我需要logging下我执行的每一条语句,以便在我疯狂之前发现这个@#$ @ ing内存损坏错误”
不是一成不变,而是一个粗略的想法,我怎么想的。
非正式地,我使用这种层次结构,
- DEBUG – 实际的跟踪值
- 信息 – 刚刚发生的事情 – 没有什么重要的,只是一个国旗
- 警告 – 一切正常,但事情不是预期的
- 错误 – 发生了一些需要修复的事情,但是我们可以继续进行其他(独立的)活动
- 致命一个严重的问题,我们甚至不应该继续下去
我通常会发布信息logging,但只有当我知道日志文件实际审查(和大小不是问题),否则它是警告。
考虑谁需要使用每个级别。 在我的代码中,我保留DEBUG作为开发者输出,例如输出只能帮助开发者。 当需要大量信息时, VERBOSE用于普通用户。 信息我用来正常显示重大事件(例如发送一个网页,检查重要的东西)。
而失败和警告是相当自我解释。
在我的团队中的惯例是使用debug
如果消息中计算的东西,而info
用于纯文本。 所以实际上info
会告诉你发生了什么, debug
将显示正在发生的事情的价值。
我倾向于将INFO定位到用户,给他们提供甚至不是警告的消息。 DEBUG往往是开发人员使用的地方,我输出消息来帮助跟踪stream程中的代码(以及variables的值)。
我还喜欢另一个级别的DEBUG(DEBUG2?),它提供了所有缓冲区的hex转储等绝对桶debugging信息。
不需要DEBUG2级别。 这就是'TRACE'的意义所在。 TRACE旨在成为绝对最低级别的日志logging,输出您可能想要查看的所有可能的信息。
为避免信息泛滥,通常不build议您在整个项目中启用跟踪级日志logging。 而是使用“DEBUG”来查找有关错误的一般信息以及错误发生的位置(因此,名称),然后只有为该组件启用TRACE时,如果仍然无法弄清楚。