ERROR :app 's doing that it shouldn' t . 这不是't a user error ('无效的搜索查询'); it'一个断言失败,网络问题等等,可能是一个将中止当前操作
WARN :'s concerning but not causing the operation to abort; # of connections in the DB pool getting low, an unusual-but-expected timeout in an operation, etc. I often think of ' WARN ' as something that'有用的东西;例如grep,分组并计算它们以了解影响系统运行状况的因素
INFO :正常记录's part of the normal operation of the app; diagnostic stuff so you can go back and say '这种广泛的操作发生的频率是多少? ', or '用户怎么做's data get into this state?'
TRACE :"Seriously, WTF is going on here?!?! I need to log every single statement I execute to find this @#$@ing memory corruption bug before I go insane"
6 回答
我认为没有任何硬性规则;使用log4j类型级别,我的“经验法则”类似于:
FATAL :应用程序(或至少是一个线程)即将死亡 . 这是解释为什么会发生这种情况的信息 .
ERROR :app 's doing that it shouldn' t . 这不是't a user error ('无效的搜索查询'); it'一个断言失败,网络问题等等,可能是一个将中止当前操作
WARN :'s concerning but not causing the operation to abort; # of connections in the DB pool getting low, an unusual-but-expected timeout in an operation, etc. I often think of ' WARN ' as something that'有用的东西;例如grep,分组并计算它们以了解影响系统运行状况的因素
INFO :正常记录's part of the normal operation of the app; diagnostic stuff so you can go back and say '这种广泛的操作发生的频率是多少? ', or '用户怎么做's data get into this state?'
DEBUG :默认情况下关闭,可以打开以调试特定的意外问题 . 您可以在此处记录有关关键方法参数的详细信息或有助于在代码的特定'problematic'区域中查找可能的问题的其他信息 .
TRACE :"Seriously, WTF is going on here?!?! I need to log every single statement I execute to find this @#$@ing memory corruption bug before I go insane"
不是一成不变的,而是对我如何看待它的粗略想法 .
非正式地,我使用这种层次结构,
DEBUG - 实际跟踪值
INFO - 刚刚发生的事情 - 没什么重要的,只是一面旗帜
警告 - 一切's working, but something isn' t完全符合预期
错误 - 发生了一些需要修复的事情,但我们可以继续进行其他(独立)活动
致命 - 一个严重的问题,我们甚至不应该继续
我通常会在INFO被记录的情况下发布,但前提是我知道日志文件实际已被审查(并且大小不是问题),否则就是WARN .
想想谁需要使用每个级别 . 在我的代码中,我保留 DEBUG 保留给开发人员输出,例如输出只会帮助开发人员 . 当需要大量信息时, VERBOSE 用于普通用户 . INFO 我用来正常显示重大事件(例如发送网页,检查重要事项) .
并且 FAIL 和 WARN 非常自我解释 .
如果在消息中计算了某些内容,我团队中的约定是使用
debug
,而info
用于纯文本 . 因此,实际上info
将显示正在发生的事情,debug
将显示正在发生的事情的值 .我倾向于将INFO定位到用户,给他们提供甚至不是警告的消息 . DEBUG倾向于供开发人员使用,我输出消息以帮助跟踪代码中的流(也包含变量值) .
我还喜欢另一个级别的DEBUG(DEBUG2?),它提供了绝对桶的调试信息,例如所有缓冲区的十六进制转储等等 .
不需要DEBUG2级别 . 这就是'TRACE'的用途 . TRACE旨在成为输出您可能希望看到的每条可能信息的绝对最低级别的日志记录 .
为避免大量信息,通常不建议您在整个项目中启用跟踪级别日志记录 . 而是使用“DEBUG”来查找有关错误及其发生位置的一般信息(因此得名),然后如果仍然无法解决问题,则仅为该组件启用TRACE .