Web开发

首页 » 常识 » 诊断 » 如何设计日志内容
TUhjnbcbe - 2023/6/30 21:14:00

本文主要为需要进行软件开发的读者提供一些经验和建议。

面向读者

需要进行软件开发的程序员

需要所开发系统进行整体把控的软件工程师

1.有关日志的基本讨论

在介绍如何设计日志内容前,有以下几个问题需要进行一些简单讨论。

本文的全部内容都基于以下这些讨论来编写。

1.1为什么要输出日志?

答:为了定位「问题」。

有人认为,系统在运行时如果遇到运行时错误时,本身编程语言或者虚拟机层面就会抛出错误,并且会标记具体的代码行号,所在函数等。并不需要额外去输出日志。也有人认为,系统在上线前,就已经经过详细的测试,所有的处理都已经被检验过,没有必要再在日志中输出相关内容。还有人认为,系统上线后出问题还是自己去负责修复,别人根本也不会去看日志,因此输不输出日志都无所谓。

这些想法都是比较片面的。

我们提到问题,不仅仅是系统报错,也可以是和设计不符的处理过程,甚至可能是用户不肯承认所做的操作而寻找的证据。其次,虽然系统在上线前「理应」被完整地测试,但测试工作本身也可能有出错,有遗漏。如果去要求测试%没有疏忽的话,不如去要求开发%没有Bug来的更加直接。最后,开发一个系统的工作并不仅仅只有开发,测试、运维甚至后续运营,好的日志不仅为自身开发带来便利,对其他岗位也有帮助,可以提高团队的整体运行效率。反过来,其他岗位在反馈问题时,如果有日志可查可附带,对开发本身也能带来极大的便利。

因此,无论一个系统多么完美,是否被详细测试过,输出日志都是必不可少的工作。

1.2日志输出了给谁看?

答:「所有」与这个系统相关的人,都需要查看全部或者部分日志。

有人认为,日志只是自己开发调试,以及后续对线上Bug调查时自己看的。「反正代码最后都是自己来改」,那么其他人不需要看,也没必要看。

这个想法也是错误的。

和「编写代码除了自己能看懂,也要让别人也能看懂一」样。如果说代码仅限开发岗需要看的话,那需要看日志的岗位就更多了。和上一问中提到的,测试、运维甚至运营都是有可能需要查看全部或者部分日志,并为他们的工作提供帮助。

因此,一份越多人能看得懂、用得上的日志,是我们应当追求的目标。

1.3不输出日志或者日志内容随意有什么危害?

答:各种想得到或者想不到的问题都会接踵而来

结合上面两问,这个问题的解答就变得显而易见了。

相信通过以上「日志三问」,读者应该能够理解本文有关日志的观点。接下来,就具体看一下如何输出日志。

2.日志格式

一般来说,一行日志即一行文本。虽然日志本身并没有严格要求格式,但规范、统一的日志输出格式不仅可以方便阅读,也能便于各种日志系统搜集提取。

2.1纯文本日志

纯文本日志是最常见,也最简单的日志输出形式。绝大多数编程语言中,都可以简单地print输出日志。

优点是可以完全自行规划格式,缺点就是不利于日志系统搜集提取。

一段典型的纯文本日志如下:

[12-:54:44][web01][TRACE-FD8CDE88][ANONYMITY][

ANONYMITY][+0ms][0ms][REQUEST]host=`web01:`,method=`GET`,url=`/users`,query=`{"pageSize":""}`,originalUrl=`/users?pageSize=`[12-:54:44][web01][TRACE-FD8CDE88][ANONYMITY][

ANONYMITY][+1ms][0ms][REQUESTFROM]ip=`.16.35.1`,ips=``,remoteip=``,x-real-ip=``,x-forwarded-for=``,x-forwarded-proto=``,referer=`
1
查看完整版本: 如何设计日志内容