项目日志到底该怎么打?

2024年12月1日

艾迪

一般写Java服务端的基本上都使用spring框架,使用spring项目则代表一般会用slf4j作为打印日志的配置标准。很多时候不是在开发中直接打印日志就好了,日志还兼具着调试,线上排查问题等功能。

且slf4j有以下的一个日志等级

debug(调试 ) < info(消息) < warn(警告) < error(错误) < fatal(严重错误)

背景为:在开发过程中,组长认为我写的日志不是很好

目的为:期望我可以使用比较好的开发习惯,在开发过程中,期望我使用最少的精力写出方便开发者做调试,以及线上进行查看的日志。

因此我打算使用以下配置作为开发者的一个习惯配置做培养

1、logback.xml配置

这个文件用于存储具体日志打印的配置。当然也有第三方日志打印/暴露endpoint以别的配置文件打印到别的目录下。基本上不会修改这个文件中的配置,除非出现问题,要求修改第三方包的日志的等级等情况才会进行修改。

2、是否该打印日志

打印日志主要是为了一下几种原因:

  1. 调试:

    开发过程中需要实时看到参数信息、业务流程分支等信息,在spring中,一些异步调用,生命周期、事件、队列消费等信息不会主动触发到,顾需要日志来显式展示配置信息、或者定位信息

    开发过程中遇到用户出现了业务上的失败流程,但是不会影响整个业务,不会影响进程安全的信息,也会需要打印出来,用于辅助调试

  2. 排查问题:

    业务上出现了问题,则会要求打印重要参数信息,用于查看配置

  3. 数据处理

    如果项目上了新特性,则需要打印对应信息,用于查看用户使用UV、PV,业务路径等信息,这个就是买点上报+数据处理上的流程。

3、打印日志的级别等级

打印过程中需要日志足够简洁足够重要。

打印过程中如要打印比较重要的参数,如数据库影响行数,入参等信息

以下是几个比较重要的打印等级的信息

  1. debug:

    一般会打印一些调试参数,方便开发者查看业务会走到哪里,在线上一般不会打开这个等级的日志打印。

    一些异步调用,生命周期、事件、队列消费等信息不会主动触发,所以也需要debug等级日志打印。

    arthas和debug等级日志很大程度上功能重合了,所以为了避免日志冗余,也可以通过使用arthas调试代码。

  2. info:

    如果是埋点上报信息,则会打印用户id,用户后续的业务点击点等信息。

  3. warn:

    如果用户在走业务流程时候出现了错误,但是不影响后续的业务流程,则打印这个等级的日志

  4. error:

    用户在业务流程中出现了严重技术或者业务错误,导致无法继续进行业务,则需要打印这个等级的日志。

4、怎么依据日志做调试排查

0、禁忌:

  1. 不要把list直接打印出来,尽量只打印,对外内存容易出现OOM、且虽然是异步打印日志,但是打印大量日志会导致不必要的消耗资源。
  2. 很多小伙伴可能用docker、k8s、ELK进行日志收集,所以为了兼容性,只能打印英语日志,打印中文日志很容易会导致乱码
  3. 打印日志要保证安全性不能名,不能明文打印敏感信息
  4. 不要打印exception对象,要打印e.getMessage()
  5. 遇到异常,打印log.error()后就不要在抛出异常了,再抛出异常可能会导致多余日志的打印

推荐阅读:

  1. 别在 Java 代码里乱打日志了,项目中这样打印日志才足够优雅!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾迪的技术之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值