在项目中里如何记录日志
date
Jun 9, 2023
slug
how-to-print-log-in-project
status
Published
tags
Code
Rework
summary
我对于完美日志的一些思考
type
Post
Created Time
Oct 28, 2023 01:45 PM
Updated Time
Oct 28, 2023 01:45 PM
AI summary
在项目中记录日志的重要性和不可替代性,可以作为问题排查工具和各方协同的交流工具,应该用一条链将发生的事情串起来,追求准确和简练,有规范可循,分层,保证安全和隐私。
Status
在项目的开发中,我愈发感受到日志的重要性和不可替代性,一份逻辑清晰、结构合理的代码,可以令开发和维护这份代码的同事兴奋不已,一份内容完整,结构清晰合理的日志,如果再能辅以合适的工具,能够让参与这个项目的所有人都兴奋不已!
想象一个这样的场景
- 程序员开发完手头的需求,就开始写今天的博客了,他不用向别人解释他刚刚做了什么,所有的逻辑都在日志里,其他人只要看一眼日志,就知道他刚刚做了什么,“有什么问题,看日志就好啦”,所有人都知道这一点!
- 测试同学发现了一个接口的返回值有问题,他不需要发消息给后端程序员,他只需要打开日志系统,输入刚才的接口,接口的逻辑就完整清晰的展现在他的面前了,“原来是这里有问题”,测试同学微微一笑,把出现问题的日志发给程序员,提醒他处理下。
- 产品同学想要修改一个产品逻辑,但是他不清楚历史的逻辑是什么样的,他打开日志系统,慢慢钻研起来,“哦,原来是这样的”,他画了一个流程图,在流程图的某一处加上了自己的需求。
- 运营同学发现产品的某一个指标不太对,他打开日志系统,慢慢查看起来,突然发现一个地方的逻辑和自己想的不一致,他立刻就意识到了——原来是这样的。
理想的中的日志系统,应该就是具备这样的能力的,它不仅仅是代码出问题时的问题排查工具,更应该是各方协同的交流工具,它是一份完整的运行手册,也是项目的说明书,更是代码的另一种表现形式。
那么,想要拥有这样的日志系统,应该怎样做呢?有如下几点:
- 用一条链将发生的事情串起来。就像每一个故事都会有一个开头和一个结尾,在软件里,开头往往是某个用户在某个场景下触发了某种机制,紧接着,软件的流程就开始运作了,它跨过山、越过海,走向了西天取经的道路,最后取得真经,把它交到如来手上,如来用它……,好了,说远了,当前端把页面展示给用户,用户看到内容时,日志系统就应该知道了,这样的结果来之不易,啊,不对,这样的内容原来是这样得到的。
- 准确且简练。无论是文字还是语言,都应该尽量追求准确和简练,百度的搜索引擎就是一个很好的不够准确的例子,至于简练,恐怕只有网络小说和爽文,人们才会不厌其烦的追更吧?无论是从物理存储的成本考虑,还是从阅读者的时间成本考虑,能够用一句话说清楚的事情,都尽量用一句话吧。
- 规范。日志的记录应该有一套规范可循,这样大家才不用像创作一样的去记录日志,毕竟,不是每一个人都有闲情逸致在写好代码的同时,还能够写出优美的文字,记录日志不是写小说,它应该像法律文件一样,用流程化的方式,提供可信的证明。
- 分层。测试环境和生产环境看到的日志应该是不一样的,测试环境为了开发的便利性,可以尽量详细的记录程序的运行方式,但在生产环境中,只需要记录关键节点的处理和最后的结果就可以了。
- 安全和隐私。任何时候,都要把程序的安全性当作是最重要的事情之一,如果你忽略了安全,只考虑性能和收益,总有一天,安全问题就会自己找上门来。
上面只是我目前开发中的所思所想,实现难度之高,我现在也都没有好的思路,一方面,我想要达到代码和日志解耦,另一方面,当日志变更时,我希望日志也能同步变更,AI 的发展或许会解决这个问题,让代码自动生产日志,代码的变更自动触发日志的变更,但这也是未来的事情了。