当前位置:嗨网首页>书籍在线阅读

02-日志记录及其重要性

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

11.1 日志记录及其重要性

“一般而言,程序应该惜字如金。”

——Kernighan and Plauger

在讨论日志记录的重要性之前,让我们先了解一下这个术语的定义,以便更好地了解它的内容。日志记录是将应用程序运行期间的活动记录到任何输出的实践,其中单个记录被称为事件日志,或简称日志。它通常与描述事件发生时间的时间戳相关联。事件可以是在内部或外部改变程序状态的任何事件。日志可以帮助你随时了解应用程序的运行时行为,或者在调试错误时获取有关应用程序的更多内容。它们还可以用于为某些商业目的生成分析报告。也就是说,应用程序日志记录的效用主要取决于应用程序和用户的需求。

在没有集成任何日志记录功能的应用程序中,我们对其运行时的行为了解有限。可以在Linux中使用外部的实用程序(例如htop)来监控我们的程序,并提供其有限的内部信息。

程序运行时的信息在调试时非常有用,或者也可以用于运行时性能分析。对于程序中某些灾难性的故障,我们可以通过程序运行时的信息了解程序崩溃时代码运行的位置,至少程序崩溃时将留下堆栈跟踪,从而提供程序出错位置的一些上下文。然而,有一类错误和事件不会立即出问题,但后续会变成致命的错误,尤其是在长时间运行的系统中。在这种情况下,事件日志可以帮助你缩小查找程序问题的范围。这就体现了为程序添加日志记录功能的重要性。

从日志记录中获益并且需要依赖事件日志的包括Web服务、网络服务器、流媒体服务器及类似的长期运行系统。在这类系统中,当单个事件日志随时间推移而与后续日志相结合,被日志聚合服务收取并进行分析,就可以提供对系统有意义的统计信息。

对于购物网站这类商业应用程序,你可以利用日志分析来获得商业洞察,从而实现更好的销售业绩。在网络服务器中,你可以找到有用的活动日志来跟踪针对服务器的恶意访问,例如分布式拒绝服务攻击(Distributed Denial of Service,DDoS)。开发者可以从收集的API请求日志中获取请求-响应延迟来评估其Web API端点的性能。

日志还可以作为重要的调试上下文环境的工具,可以最大限度地缩短调试会话期间执行关键因素分析所需的时间,以便开发者有时间修复在实际的生产环境中出现的问题。

有时,日志记录是执行此操作的唯一方法,因为调试器并非总会奏效或兼容。在分布式系统和多线程应用程序中通常就会碰到这种情况。任何在这些系统中进行了大量开发的人员都非常清楚,为什么日志记录是软件开发流程的重要组成部分。

能够从应用程序日志记录中获益良多的用户大致有3类。

  • 系统管理员 :他们需要监视服务器日志中的任何故障,例如硬盘崩溃或网络故障。
  • 开发人员 :在开发过程中,将日志集成到项目中有助于缩短开发时间,后续还可以深入了解用户与应用程序的交互方式。
  • 网络安全团队 :在远程服务器遭受任何攻击的情况下,安全人员都可以从日志记录中获益,因为他们可以通过跟踪被攻击服务器记录的事件日志来了解攻击是如何执行的。

日志作为软件开发实践中的一个功能组件,能够长期提供巨大的价值。在系统中集成日志需要专门的框架,我们将在11.2节中详细讨论。