-
1 日志的重要性
-
1.1 写好业务代码很重要
-
1.2 记好日志一样重要
-
日志要素
-
记录时机
-
日志框架
-
总结
1.1 写好业务代码很重要
在开发过程中,写好业务代码的重要性不言而喻,毕竟这是跟程序功能最密切相关的工作,程序出 BUG,一般就是业务代码写得有问题了。
1.2 记好日志一样重要
做好日志记录,也是非常重要的,通过查看日志,能帮我们解决很多问题,以下是开发过程中经常会碰到的一些问题:
程序是不是按预期执行?
我们可以通过日志记录程序的执行流程、运行状态、关键指标⋯⋯有了这些日志,才能更好地进行调试跟踪。
程序有BUG怎么办?
有BUG得排查问题,而定位问题最高效的方式,就是日志。我们总不能一行行代码排查,或者掐指一算随便蒙,不然问题没找到,更不用谈修复上线。
用户在系统上干了什么?
这就需要结合业务,记录用户操作行为。用户登录到退出系统中间,所有的重要操作,都应该形成日志,作为审计的依据。
这个问题是谁造成的?
在大型应用中,不同系统之间的协作相当紧密,有时系统出问题了,可能是第三方系统造成的,通过在程序交互的关键位置记好日志,就能减少不必要的扯皮。
既然日志这么重要,一份好的日志,应该具备哪些要素呢?结合工作中的积累,我把日志要素总结为以下这张图(绿色部分是必选项,红色部分酌情选择):
日志时间
日志作为事件的表述,事件发生的时间一定要有,而且应该精确,推荐的格式是:
yyyy-MM-dd HH:mm:ss.SSS
日志级别
应该根据日志的重要性或严重程度划分等级,最常用的日志级别有:DEBUG
、INFO
、WARN
、ERROR
,只有合理定义日志级别,才能避免日志混乱。
-
DEBUG
:调试,在开发、测试阶段使用,记录调试性质的内容,生产上应该关闭该级别的日志,减少频繁打印导致程序性能受影响及存储空间的浪费。 -
INFO
:信息,记录系统正常运行期间的关键信息,主要是程序运行度量、业务操作记录两部分内容,分别用于系统监控及业务审计。 -
WARN
:警告,用于程序告警,造成这些告警的原因是可预期有规划的,比如请求参数不合法、系统资源紧张但可等待恢复、依赖方不可用但允许临时降级。 -
ERROR
:错误,记录不可预知的程序异常。比如网络调用、数据库访问等低层资源造成的错误,应用层面没有预期到的,这种错误日志数量上应该很少,内容上应该尽量详尽记录出错成因。
线程名称
特别在 Web 应用程序中,一次同步请求一般对应一个处理线程,输出线程名称可以区分一次具体的请求上下文。
业务标识
用来区分日志属于哪块业务,因为日志都是跟业务相关联的,通过该部分内容便于按业务进行日志归类聚合。
记录器名称
日志的记录器名称一般是声明日志记录器实例的类名,通过记录器名称可以快速定位到日志输出的类是哪个。
日志内容
根据不同的日志等级,在日志内容上会有不同的侧重点,但在内容输出上,有一些点是需要注意的:
-
通过日志框架而不是直接使用程序输出流(
System.out
、System.err
)来打印日志内容。 -
除了开发环境,其它线上环境应该采用文件日志而不是控制台日志,一方面是日志持久化,另一方面是程序性能考虑。
-
日志内容应该异步输出,而不是同步阻塞的方式,特别是大迸发应用场景下更应该注意。
-
善用占位符特性,一般日志框架都有占位符功能,避免不必要的字符串拼接。
-
预防日志内容构建过程中的空指针异常、多余的对象序列化、不必要的中间过程执行。
-
注意敏感内容输出,造成的安全隐患,比如用户密码、账户信息等。
OpenTracing 标识
通过 AOP 切面,日志框架 MDC 等技术结合,在日志上添加一些链路追踪的扩展元素,将会很大程度方便通过日志进行程序请求调用的链路追踪,这在分布式系统中尤其重要。
异常堆栈
堆栈异常信息有助于程序异常的排查定位,但这部分信息的记录输出,对系统性能有一定的影响,应该酌情考虑,如果记录异常信息足够定位异常的,就不要打印整个堆栈。一般是ERROR
打印异常堆栈,WARN
不打印,还有就是通过日志框架打印,避免用printStackTrace
方法打印。
产生行数
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
总结
互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。
**另外本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **
下面有部分截图希望能对大家有所帮助。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
信经过一些面试,大家都会有这些感触。
**另外本人还整理收藏了2021年多家公司面试知识点以及各种技术点整理 **
下面有部分截图希望能对大家有所帮助。
[外链图片转存中…(img-bjrvRMlW-1713728359774)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!