跳转至

概览

在程序上线运行之后,我们通常难以再使用调试器调试程序,我们不可能让用户的请求卡在那。而且在平时开发的时候,我们有时候也会犯懒不用调试器。而多线程甚至多进程以及分布式的调试更是困难。

在使用调试器调试程序比较困难的时候,输出日志便成为了另一个调试的有力工具。在平时调程序的时候,你肯定用过 printf 或者 cout 来输出程序的中间状态或者显示程序执行到了哪一步。其实用日志也是同样的思想,就是让程序运行的时候输出一些信息来帮助我们诊断问题,或者确保程序运行正常。

当然,在严肃的 C++ 项目中,我们肯定不能直接 cout 完事,而是需要使用日志库。通常来说,日志库和 cout 比起来有以下功能。

  • 支持信息的分级。例如 DEBUGINFOWARNINGERROR 等,这样开发完成后不需要注释掉输出语句,只需要调整等级。
  • 支持多个输出目的地。例如我们可以让一条日志同时打印在屏幕上以及输出到文件里方便分析。
  • 支持日志滚动。日志文件太多的时候,日志库会删除一些过时的无关紧要的日志。
  • 更高的性能。日志库为了不影响程序的执行效率,通常会高度优化格式化以及输出的性能。
  • 多线程处理。使用 printf 或者 cout,在多线程同时输出的时候,有可能一行日志会混杂多个线程的输出,日志库可以正确高效地同步输出,避免输出混乱的现象。

最后更新: 2021-07-19 19:47:29
本页作者: Howard Lau