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

Ujj*_*yan 11 c++ logging error-logging

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

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

mat*_*ort 14

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

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

日志库添加了对日志记录有用的功能,并且超出了简单printf提供的功能.这包括以下内容:

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

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

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