输出日志的最佳实践

从应用反馈的日志是你应用唯一告诉你信息的方式。拥有正确的优秀的可搜索能力的日志就像在黑暗的房间中间有一个火炬。

在到任何问题下充分利用日志的作用是被评估过低的。作为软件工程师,我们可以利用来自应用的日志来解决问题,同时也可以知道应用整体的健康状况。

日志也可以起到展示应用性能的作用。

本身重点介绍从应用程序级别进行日志记录时可以遵循的最佳实践,以及它如何帮助作为软件工程师的你。

一目了然的最佳实践

以下是日志记录的主要的最佳实践。

1. Log information optimally

过多的信息会显得干扰我们,但过少的信息让我们不足以解决问题。处于打多少日志是最优的平衡状态是困难的,并且那是一个挑战。在多个微服务的情况下,也需要考虑服务之间的可追溯性,例如使用唯一的请求标识符。要记住的另一件事是日志是暂时的,不是永久的。因为它们不是被存在数据库中,它们通常有几天到几周的生命周期。

2. Always follow severity levels

紧急情况意味着你的电话将会在早上2点响起,但是一个普通信息级别的错误不会打扰任何人。你必须同意一些团队标准,如系统日志。

3. Structure youre logs

在你的日志行中有一个结构,比如有一条消息和一个添加了更多消息相关的上下文数组。遵循一个商定好的JSON标准来进行日志记录。这可以让语法分析和搜索变得简单。你甚至可以设置更多的规则,例如日期是必需的,一段描述不能超过255个字符,额外信息放在上下文中等。有了这些规定使当需要时查找日志变得更简单。强烈建议提供带有上下文的日志行,例如在记录订单无法发送时添加订单的详细信息(当然是不敏感的内容)。

4. Write logs carefully (don't hamper performance)

确保添加日志不会为响应时间增加额外的毫秒数。尽可能用异步方式写入日志,日志甚至可以被写在本地的日志文件,并且使用一个日志转发器发送到你选择的日志服务上。你也可以根据你使用的语言/框架使用久经考验的库。使用队列也可以成为发送日志的选项,但请记住查看日志时可能存在一定的延迟。

5. Use the right tools for the job

你们选择用来传输,查看,搜索和排序日志的工具和服务是你们团队的选择。根据预算和使用外部服务的兴趣,团队可以使用完全自主的堆栈,例如ELK/Graylog,或者完全使用SAAS服务,例如Logentries/Sematext Logsense。主要思想是使用非常有效地满足你需求的工具。如果你需要几乎实时的日志,在这种情况下,使用队列可能不是最好的决定。所以设计适合你的日志架构和堆栈也很重要。

结论

如果狗是人最好的伙伴,日志是软件工程师最好的朋友。

尽可能充分地利用日志,并且牢记有关日志的最佳实践。

Reference

Logging best practices to get the most out of application level logging – Slides