积累日志的好处 | 原创,AI翻译
在银行担任承包商时,我们使用多云应用平台为微服务提供服务。当时,我在公司工作时开始积累日志。
几年后,我仍认为这是帮助我工作或进行软件工程的最佳方式之一。随着时间推移,在我的日志目录中,有数百个日志文件。
我没有为这些日志设置特定的子目录或正式的日志文件名。有时,我只是用JIRA任务名称作为日志文件名的前缀,或者用该功能。然后,我会在后缀中添加一个数字。例如,mutual-fund-1.log、mutual-fund-2.log等。这意味着在共同基金微服务中,我运行该微服务时会有这些日志。
有时,在为多个地区服务的项目中,我会将该国家作为后缀添加,例如mutual-fund-cn-1.log、mutual-fund-sg-1.log。日志的文件名有些随意。因为当时,我需要关注错误堆栈或周围的函数调用。
程序的日志很重要。人人皆知。然而,我要强调积累日志的重要性,而不仅仅是查看控制台中的日志并让它们消失。当项目进行时,你会发现更多便利。你有更多时间查找之前的日志。你可能需要了解是否曾经发生过类似的数据库存储过程调用。你可能需要了解是否曾经发生过相同的错误。你可能需要回忆上次如何解决这个问题。
在大型项目或数十个微服务中,有大量的细节。错误、异常或问题会一再发生。日志就像程序的运行文档。它们是由程序自动生成的,无需人工输入。对于开发者来说,这些日志是可读的。因此,在开始新任务或修复新错误时,你手中有数百个日志可用于解决这个新错误。你并不孤单。
为什么要积累它们?因为事情或知识容易被遗忘。
当纸张被发明时,人类文明取得了进步。当计算机被发明时,人类文明又上升到一个新的层次。在纸上做笔记就像在计算机中积累日志。
不仅仅是人类,对于AI聊天机器人、LLM工具等,这些日志也变得越来越重要。2022年成立的GreptimeDB,一个用于统一收集和分析可观测性数据(指标、日志和跟踪)的数据库,并非偶然。
为什么我之前没有这样做?在为大型银行担任承包商后,我需要进行更多的协作并参与更大的项目。在此之前,大多数时间在初创公司或我的初创期,我都是独自工作。在LeanCloud工作时,我大约有一半的时间用于开发IM应用LeanChat。
当我进入更正式的企业世界时,项目的开发与我的个人项目或初创项目不同。它们有SIT、UAT测试环境。生产环境通常仅对少数团队成员开放。从他们那里获取日志并解决问题变得漫长且有些繁琐。运行项目需要时间,Jenkins管道通常需要半小时才能运行。
因此,我无法像苍蝇一样运行或测试程序。我无法通过在个人电脑上输入命令并将代码上传到服务器来进行部署。
因此,这让我积累日志以获得更多上下文来处理任务。我们最好在第一次就解决问题。我们最好在几次尝试中验证我们的修复。我们很难获取在云或公司服务器上运行的程序的日志,因此我们最好将其复制并保存在本地笔记本电脑上进行分析。
现在,对于我的个人项目,我也会积累日志。这已经成为习惯。在大公司工作了几年后,我在某种程度上有了更多的耐心或策略来使我的项目更大、更长久。因此,我知道随着时间推移,我需要这些日志。
有人可能会说,你只需要有优雅的代码和可运行的项目。你不需要积累日志或错误堆栈。没问题。当我们遇到错误或新功能时,我们可以运行程序来获取当前日志。我们不需要开发过程中的日志。它们就像科学实验的详细记录。一开始看起来没问题。但在长期来看,如果有一天你想重新工作,或者想分享它,或者让他人接手,可能就不好了。
我认为这里可能有很好的机会。在公司中,为什么不鼓励每个开发者分享他们积累的日志?在开源项目中,我们也应该这样做。我们之所以不觉得别人的日志有吸引力,是因为我们不了解它们。在保存这些日志时,我们失去了上下文。而且,其中似乎有大量无关或琐碎的消息。
积累日志的努力微不足道。每次看到日志时,尤其是错误日志,我们只需要复制和粘贴。那么,我们能否以自动化的方式来做呢?每次运行项目时,例如Spring Boot项目,在目录中记录日志是个好主意。
世界变得越来越数字化,因此积累数字程序的日志就像在物理世界中积累书籍。