关于日志的123
写在前面:
关于日志其实有很多想说的,不过将自己整理的文档转化为Blog还是比较花时间的,偶有疏漏,请多包涵。
本篇文章所讲均只止于Java。
日志的作用:
1.定位问题,对于一个系统而言,总是会有些意外发生,例如系统接口被抓,被薅羊毛,如果在方法内部记录好日志,那么就可以定位问题发生的位置、原因、事故对象。
2.性能优化,对于一些报表或者其他占用IO比较大的业务,通过日志可以进行详略得当的优化,这在开发时间比较紧的时候,能够排出先后顺序,对于抢占排期有至关重要的作用。
常用日志级别:
1.INFO:对于系统运行期的数据进行记录,合格INFO信息应该对于具有高需求的数据进行记录,如金额、积分变化,用户的个人数据等。另外对于改变应用状态的信息也应该记录,例如数据库更新,其他系统交互等。
2.DEBUG:对于系统开发时,测试的数据进行记录,有些时候我们调试的数据并不好找,可以考虑通过Debug的日志信息进行定位,这些不好找的信息包括:其他系统交互,线城池调用等。
3.ERROR:这个级别的信息必须被处理,一般情况下,出现这种信息都会造成系统功能瘫痪。
4.WARING:这个级别的信息可以忍受,但是应该被关注,在有时间的时候,进行业务评估,考虑是否需要修复处理。
以上是常用的四个日志级别,另外还有TRACE等没有介绍,在日常使用时,不同级别的日志最好输出到不同的目录当中,按照日期分类这样在排查问题时会非常有效。
日志的使用:
1.日志对象的生成:统一使用工厂方式创建对象,减少资源开销并防止意外篡改。
2.日志的使用:
推荐使用Slf4j,他的可变参数对于提升性能和减少书写非常有作用,此外推荐插件Lombok,不仅可以通过@Slf4j省去创建日志对象的烦恼,同时可以节省Pojo的构造函数创建以及getter/setter方法。
必须注意,如果使用了Lombok,必须保证其他开发者也装了这个插件,不然会造成毁天灭地的后果。
3.注意:
3.1.debug/info级别的信息,如果业务较复杂,必须添加 isXxxEnabled() 判断,可以减少日志的无效输出,提升效率。
3.2.error和warn级别的信息,如果导致业务不正常,使用error,如果错误可预期,使用warn。
3.3.异常捕获之后应该处理,也就说,打印错误信息。捕获异常范围过大和捕获不处理,都是非常不负责任的行为。
3.4.敏感信息接口应该记录日志。
3.5.日志信息打印要防止因为打印信息问题而导致的报错,例如NullPointerException。
3.6.日志的分类很重要,应该避免将所有日志输出到一个文件里;同时,日志中的信息应该脱敏并且尽量清晰明了,过于冗余和过于简单都是不可取的。
总结:
好的日志可以帮助我们快速定位问题,在系统性能优化中提供可靠的数据帮助分析,在日常开发中,我们应该对于日志信息有更多地重视。本文仅仅是一篇入门级的简要概述,以期起到抛砖引玉的作用。在日常开发中,日志还有很多需要注意的地方,比如参数化的多参数支持,日志的具体业务分类,这些因应个人环境不同,会有不同的变化。
希望这篇文章能对阅览的你产生帮助,下期见。