日志级别的选择:Debug、Info、Warn、Error还是Fatal
1. 等级由低到高
debug
< info
< warn
< Error
< Fatal
2. 区别
debug
级别最低,可以随意的使用于任何觉得有利于在调试时更详细的了解系统运行状态的东东;
info
重要,输出信息:用来反馈系统的当前状态给最终用户的;
后三个,警告、错误、严重错误,这三者应该都在系统运行时检测到了一个不正常的状态。
warn
可修复,系统可继续运行下去;
Error
可修复性,但无法确定系统会正常的工作下去;
Fatal
相当严重,可以肯定这种错误已经无法修复,并且如果系统继续运行下去的话后果严重。
3. 使用
什么时候使用 info
, warn
, error
?
info
用于打印程序应该出现的正常状态信息, 便于追踪定位;
warn
表明系统出现轻微的不合理但不影响运行和使用;
error
表明出现了系统错误和异常,无法正常完成目标操作。
4. 格式
总结起来, 错误日志格式可以为:
log.error(“[接口名或操作名] [Some Error Msg] happens. [params] [Probably Because]. [Probably need to do].”);
log.error(String.format(“[接口名或操作名] [Some Error Msg] happens. [%s]. [Probably Because]. [Probably need to do].”, params));
或
log.error(“[Some Error Msg] happens to 错误参数或内容 when [in some condition]. [Probably Because]. [Probably need to do].”);
log.error(String.format(“[Some Error Msg] happens to %s when [in some condition]. [Probably Because]. [Probably need to do].”, parameters));
[Probably Reason]. [Probably need to do]. 在某些情况下可以省略; 在一些重要接口和场景下最好能说明一下。
每一条错误日志都是独立的,尽可能完整、具体、直接说明何种场景下发生了什么错误,由什么原因导致,要采用什么措施或步骤。
5. 意义
错误日志是排查问题的重要手段之一。 当我们编程实现一项功能时, 通常会考虑可能发生的各种错误及相应原因:
要排查出相应的原因, 就需要一些关键描述来定位原因。这就会形成三元组:错误现象 -> 错误关键描述 -> 最终的错误原因。
需要针对每一种错误尽可能提供相应的错误关键描述,从而定位到相应的错误原因。也就是说,编程的时候,要仔细思考, 哪些描述是非常有利于定位错误原因的, 尽可能将这些描述添加到错误日志中。