日志级别的选择:Debug、Info、Warn、Error、Fatal

日志信息分类

1.等级由低到高:Debug < Info < Warn < Error < Fatal;

2.区别:
Debug 级别最低。一般的来说,在系统实际运行过程中,一般都是不输出的。因此这个级别的信息,可以随意的使用,任何觉得有利于在调试时更详细的了解系统运行状态的东东,比如变量的值等等,不过都输出来看看也无妨。

Info 重要。这个是用来反馈系统的当前状态给最终用户的,所以,在这里输出的信息,应该对最终用户具有实际意义,当然最终用户要能够看得明白是什么意思才行。从某种角度上说,Info 输出的信息可以看作是软件产品的一部分(就像那些交互界面上的文字一样),所以需要谨慎对待,不可随便。

Warn、Error和Fatal:警告、错误、严重错误,这三者应该都是在系统运行时检测到了一个不正常的状态。

Warn 可修复,系统可继续运行下去。
应该是这个时候进行一些修复性的工作,应该还可以把系统恢复到正常状态中来,系统应该可继续运行下去。

Error 可修复,但不确定系统会正常的工作下去。系统在以后的某个阶段,很可能会因为当前的这个问题,导致一个无法修复的错误(例如宕机),但也可能一直工作到停止也不出现严重问题。

Fatal 不可修复,系统继续运行后果严重。
可以肯定这种错误已经是无法修复的,并且如果系统继续运行下去的话,肯定会越来越乱。这时候采取的最好的措施不是试图将系统状态恢复到正常,而是尽可能地保留系统有效数据并停止运行。

3.使用
什么时候使用 Info 、Warn、Error ?
Info 用于打印程序应该出现的正常状态信息, 便于追踪定位;
Warn 表明系统出现轻微的不合理但不影响运行和使用;
Error 表明出现了系统错误和异常,无法正常完成目标操作。

总的来说选择 Warn、Error、Fatal 中的具体哪一个,是根据当前的这个问题对以后可能产生的影响而定的。如果对以后基本没什么影响,警告;如果肯定是以后要出严重问题,选 Fatal;而不确定结果如何,那么就选 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.意义
错误日志是排查问题的重要手段之一。 当我们在实现一项功能时候, 通常要考虑可能发生的各种错误及相应原因:

那么要排查出相应的原因, 就需要一些关键描述来定位原因。
这就会形成三元组:错误现象 -> 错误关键描述 -> 最终的错误原因。

需要针对每一种错误尽可能提供相应的错误关键描述,从而定位到相应的错误原因。也就是说,编程的时候,要仔细思考, 哪些描述是非常有利于定位错误原因的, 那么就尽可能将这些描述添加到错误日志中。

猜你喜欢

转载自blog.csdn.net/weixin_43226394/article/details/84985251