在理想的国度,用户输入数据的格式都是正确的,选择打开的文件也都是存在的,调用的第三方接口也都是网络稳定,程序的代码也是永远都没有bug的。
不过,在现实的世界里,bug无处不在,用户瞎输入、第三方接口间歇性失败、网络故障、未知错误,太多太多了。
此时,在bug面前,程序的稳定性尤为重要,一遇到bug就死翘翘,一遇到异常就宕机,这…
在遇到上述异常时,及时有效的通知客户、保存现存的所有工作、允许用户安全的退出程序、异常之下,错误日志的有效记录,显得尤为重要。
然而,在实际的工作中,大部分程序员都没有将日志的记录规范化、重点化,都是得过且过的状态。
项目上线后,一天好几百万的业务办理,一个文件日志好几十万行,在Linux中查看日志,没有固定的关键字定位,两眼一码黑,找什么找,怎么找?
拷贝到本地后,也是如此,通过notepad打开日志文件,也是找不到问题所在,只有一个异常日志,具体什么原因不知道,多线程缘故,有的小伙伴连事故的起点都找不到。这种情况下,你要怎么解决?
开发人员一定要在最开始的时候,就养成一种良好的日志记录习惯,哪些日志要记录,哪些日志不用记,都是什么级别的日志。
要想定位问题,通过什么关键字去定位,如何才能做到一模而了然。
日志最大的用处,还是快速定位问题,快速找到问题原因。
1、日志的可读性,日志是记录问题的,然后让维护人员看的,规范的、通俗易懂的日志才是王道。
2、日志的性能,不管是记录到文件里,还是记录到数据库里,记录日志肯定是要消耗程序性能的,这样,哪些需要记下,哪些不用记,需要权衡利弊。
3、大的循环中,尽量不要记录日志。
4、日志的级别,一般情况下,程序运行时记录info日志,发生异常时记录error日志,也可以记录警告日志,比如某些参数超过了,但是不影响整体程序的运行。
哪些内容需要记录在日志中,日志不是越多越好,越丰满越好,凡是要有一个度。
总之一句话,你认为哪些参数比较重要,有助于你排查问题,就记录哪些。
Log4j 是 Apache 的一个开源项目,项目中一般都是通过Log4j来记录日志,可以通过配置文件定义日志输出的级别、格式、存储路径等。
Log4j 中将要输出的 Log 信息定义了 6 种级别,依次为 TRACE、DEBUG、INFO、WARN、ERROR 和 FATAL。
很低的日志级别,一般不会使用。
一般在项目调试阶段使用,记录的日志更细粒化,主要打印开发过程中的一些重要变量。
info日志,是最常用的日志,用于记录正常运行情况下,程序的执行情况,执行轨迹,打印一些比较重要的东西,但不能滥用,避免日记记录过多,维护运维阶段定位问题过于麻烦。
主要用于记录一些警告,比如你的本意是查询某些产品信息,但是没有查到,逻辑上没有错误,但业务上说不通。
通常在发生异常、程序入参校验失败时,用error级别记录,也会单独产生error文件。
FATAL 指出每个严重的错误事件将会导致应用程序的退出,这个级别比较高,重大错误,程序无法恢复,必须通过重启程序来解决。
本文收录于Java基础教程(入门篇),包含面向对象、基本数据类型、数组、继承和多态、泛型、枚举等Java基础知识点。
姐妹篇,Java基础教程系列,目前已经700+订阅,CSDN最强Java专栏,包含全部Java基础知识点、Java8新特性、Java集合、Java多线程、Java代码实例,理论结合实战,实现Java的轻松学习。
姐妹进阶篇,Java基础教程(进阶篇),包含Java高并发、Spring、MySQL等Java进阶技术栈。