记录库的含义和目的是什么?

时间:2015-08-18 16:19:45

标签: c++ logging error-logging

我想了解日志库的基础知识。

  1. 日志库的目的究竟是什么?我知道日志基本上是关于执行期间的应用程序进程的信息。一种方法是直接在文件中写入信息。
  2. 设计专用库(例如glog)用于记录目的的目的是什么? 我对记录的理解是否正确,还是需要更改? 有人能举例说明使用日志库的重要性吗?
  3. 选择日志库时应该看一下哪些功能?
  4. 如何在实施过程中有效地使用日志记录?

2 个答案:

答案 0 :(得分:12)

在执行应用程序期间记录信息可以帮助您了解导致错误或崩溃的原因,为您提供比从崩溃报告,调用堆栈甚至小型转储获得的更多上下文。当您从不是开发人员并且未在调试器下运行的人那里获得错误或崩溃报告时,这一点尤为重要,无论是最终用户/客户还是团队中的非开发人员。

我的背景是游戏,由于一些原因,日志记录对游戏特别有价值。一个是许多问题可能与系统硬件的细节有关,因此记录用户拥有的GPU类型,运行的图形驱动程序版本等信息对于调试仅出现在问题上的问题至关重要。具体配置。另一个是游戏具有模拟方面,其中游戏的状态随着时间的推移而演变,以响应用户输入以及诸如物理,AI和游戏规则之类的模拟。了解在崩溃或错误发生时发生的事情有助于弄清楚如何重现它并为问题的根本原因提供有价值的线索。

日志库添加了对日志记录有用的功能,并且超出了简单printf的功能。这包括:

  • 能够根据调试与发布版本和运行时设置(如-verbose标志)等因素控制日志记录量。
  • '频道的概念'可以独立启用,禁用或设置为特定详细程度。例如,要调试图形问题,您可能需要'图形'频道设置为最大的冗长,同时使网络静音'和' audio'信道。
  • 灵活的后端,从记录到磁盘上的本地文件到通过网络记录到远程数据库。
  • 线程安全,以便在可能从多个不同线程同时进行日志记录时,日志记录会自行运行。
  • 使用时间戳和任何其他相关信息(频道,详细级别等)自动标记日志条目。

至于如何使用日志库,这在某种程度上取决于您的应用程序,但这里有一些一般性的建议:

  • 如果您的日志库提供它们(并且它应该),请充分利用频道和详细级别。这将有助于您在应用程序增长时管理可能成为大量日志消息的内容。
  • 如果您遇到意外但非致命的情况并处理它,请记录一些有关它的信息,以防以后导致无法预料的问题。
  • 在应用程序启动时,如果您收到客户的错误或崩溃报告,请记录可能对以后再现罕见错误有用的任何信息。如果有太多信息,你永远不会知道提前有用的东西。这可能包括CPU类型,GPU型号和驱动程序版本,可用内存,操作系统版本,可用硬盘空间等。
  • 记录键状态转换,以便您可以跟踪应用程序处于什么状态以及在调试问题时它是如何实现的。

答案 1 :(得分:2)

许多程序使用某种日志记录,即使代码相对简单,每次重新发明轮子也没什么意义。

其他库也可以使用日志库,因此您无需为项目中包含的每个库配置日志文件,只需配置一个日志库即可。这也意味着可以通过替换一个库而不必替换多个库来修复日志代码中可能出现的任何错误。

最后,它使代码更容易为其他开发人员阅读,因为他们不必弄清楚如何实现自定义日志记录。