日志规范多重要,这篇文章告诉你!

发布者:三居士 2023-5-25 03:46

本文脉络

1 日志的重要性1.1 写好业务代码很重要1.2 记好日志一样重要日志要素记录时机日志框架总结

1 日志的重要性

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方法打印。

产生行数

即产生日志的源代码行,该记录对程序性能有比较大的影响,也应该谨慎使用,前面谈到通过记录器名称跟类名关联,很大程度上能帮我们定位产生日志的代码范围,行信息就可以不用了。

日志输出格式

记录时机

程序流程

记录程序的流转分支,在关键代码逻辑的执行前后进行相应的日志输出,有助于代码调试。但要避免不必要的日志输出,比如一般只在循环体前后记录日志,而不在循环体内重复记录,过多的日志反而会影响阅读。

远程调用

远程调用也属于程序流程的一部分,但第三方远程调用的日志信息级别,应该比一般的调试日志区别对待,因为涉及到外部系统的交互,在出入口处记录请求响应的信息,相当重要。

系统初始化

系统初始化需要依赖一些关键配置参数,这些参数决定系统的启动状态,应该把这些系统初始化信息记录起来。

核心业务操作

系统用户进行核心业务操作的行为,也应该进行记录,便于进行操作审计。

可预期的异常

这类异常应该有效记录起来,通过警告方式反馈给相关人员加以关注,避免频繁发生,最终演化为不可控的错误。

预期外的错误

这类异常发生时,要有详尽记录,并通知相关人员介入处理,第一时间作出响应,因为这种错误已经影响系统的正常使用。

日志框架

在 Java 应用中,日志打印涉及到的组件工具主要如下图所示:

中间部分是日志输出的核心,除了 Logback 外,常用的还有 Log4j/Log4j 2,Log4j 已经有点过时,而 Log4j 2 在异步日志的性能表现上,比 Logback 更加突出。

总结

本文主要讲的是日志的一些相关概念,包括日志要素、记录时机、日志框架的简单介绍,日志很重要,好的系统离不开日志。后续会对这些进行细化,从技术实现的角度,分享应用日志性能提升、日志采集汇总、日志统计分析、分布式系统链路跟踪等内容,以及在工作中遇到的一些日志坑,后续会分享架构其他方向文章。

下篇预告:本文承上启下介绍了日志的重要性,下篇文章会分享基于非aop跨语言、高性能方式实现用户操作日志,一篇非常高大上的实战篇,记得mark哦!

推荐阅读
  • 长日记第13天:300篇文章爆款

    长日记第13天:300篇文章爆款

    **标题:** "倪海杉回农村,自建房引热议:现代风格VS传统智慧,谁更胜一筹?"**开篇:**“网红倪海杉回农村老家,两层小楼引发网友关注!没想到,这位超级网红的...

    01-01

  • 我的生活日志(一)2022.5.31记

    我的生活日志(一)2022.5.31记

    又是一天工作日,忙忙碌碌,从早上九点到晚上六点。中午休息的一小时,趴着睡了二十分钟。午饭吃的是自带的面包、酸奶和一个西红柿,其他的同事有的带饭,有的点的外卖。午...

    10-20

  • 看完《二十一天》大结局,我难掩激动心情,写下这篇文章

    看完《二十一天》大结局,我难掩激动心情,写下这篇文章

    刚刚,我看完了灾难片《二十一天》的大结局。虽然和不少观众的感受一样,我也觉得这部电视剧,有不少漏洞。比如这群人明明是在大型商超里,但是最后他们却没有找到多少吃的...

    10-01

  • 3.0版挑战30天在头条写日记的最后一天,文章收益高于微头条

    3.0版挑战30天在头条写日记的最后一天,文章收益高于微头条

    #挑战30天在头条写日记#挑战写日记,这个活动是四月份开始的,今天结束,当时读要求的时候觉得要写文章,会不会太难,实际上它的奖金并不多,没有后面推的任何活动的奖金多...

    09-04

  • 2022母亲节主题满分作文

    2022母亲节主题满分作文

    一年一度的母亲节,让我们都来借着过往温暖记忆,赞美我们母亲吧。下面是小编为大家整理的关于2022母亲节主题满分作文,希望对您有所帮助!2022母亲节主题满分作文1“世上只...

    07-18

  • 核酸检测的一天

    核酸检测的一天

    本报讯(通讯员 姚昕廷 王晶 YMG全媒体记者 权立通 摄影报道)8月3日,我区开展了首轮全员核酸检测,在区卫健局党组的安排部署下,各医疗机构白衣战士再度启程,纷纷奔赴各...

    06-13

  • 她们的日记里写满了忠诚与爱,每一篇都让人泪目

    她们的日记里写满了忠诚与爱,每一篇都让人泪目

    第2批军队支援湖北医疗队听令出征、支援一线已经有了一个多月的时间湖北妇幼保健院光谷院区感染六科军队医护工作者们经过长时间的战斗脸上写满了疲惫但翻开她们的日记字里...

    05-17

  • 收藏篇:这辈子看过的最好的日志!没有之一!

    收藏篇:这辈子看过的最好的日志!没有之一!

    各种普通的食物最好吃的时刻   白开水要刚好烫嘴的温度,但是不会真的烫到人。微微感受到滚过嗓子的温度。最好是用力喝到满口,让烫嘴的开水轻轻烫到整个口腔。  玻璃...

    05-16

  • 我的第一篇日志——一个小人物的自述与自悟

    我的第一篇日志——一个小人物的自述与自悟

    我的第一篇日志这是我的第一篇日志。决定以日志的形式去做分享是昨天的事,今天就开始了写第一篇日志。还没有想过要去制作分享什么内容,没有什么计划,也没有什么特别的目...

    04-30

  • 精美日记小本,随手记录生活与心情

    精美日记小本,随手记录生活与心情

    #头号周刊#你是否和我一样,总喜欢随身携带一个精美的日记本,随时记下眼前的风景,心中的寄语,内心瞬间的感动?饭后一个人静坐台灯下,听雨、闲翻随身携带的日记小本。在...

    03-20

Copyright © 2021-2025 领读者 All Rights Reserved.

本网站提供好文章在线阅读,经典好文章推荐好文章摘抄日志随笔等各种文章应有尽有。

蜀ICP备09043158号-3