C++ 速度关键系统的设计跟踪/日志
假设我们有速度关键的系统(例如统计/分析、套接字编程等),我们如何设计跟踪和日志 更具体地说,日志和跟踪通常会降低性能(即使我们有关闭机制或详细扩展机制)。在这种情况下,是否有关于如何“放置”日志/跟踪的参考指南,以便在问题发生时(特别是在生产现场),开发人员/后期生产团队能够确定实际问题C++ 速度关键系统的设计跟踪/日志,c++,design-patterns,logging,architecture,C++,Design Patterns,Logging,Architecture,假设我们有速度关键的系统(例如统计/分析、套接字编程等),我们如何设计跟踪和日志 更具体地说,日志和跟踪通常会降低性能(即使我们有关闭机制或详细扩展机制)。在这种情况下,是否有关于如何“放置”日志/跟踪的参考指南,以便在问题发生时(特别是在生产现场),开发人员/后期生产团队能够确定实际问题 PS:我来自这样的背景:这些应用程序是用C/C++开发的(在Linux上运行)您可以在缓冲区中积累日志,您可以使用它来描述和实现。您可以让不同的线程定期(每5分钟)将此缓冲区清空到磁盘,或通过(或其他)将其发
PS:我来自这样的背景:这些应用程序是用C/C++开发的(在Linux上运行)您可以在缓冲区中积累日志,您可以使用它来描述和实现。您可以让不同的线程定期(每5分钟)将此缓冲区清空到磁盘,或通过(或其他)将其发送到守护进程,该守护进程侦听并将其写入持久性数据库,或只是将其写入磁盘 如果不想访问生成日志的计算机上的磁盘,可以通过将它们发送到另一台计算机,然后将它们写入该计算机上的磁盘
如果您正在从多个机器中聚集日志,请考虑使用或作为消息队列将日志通过网络传递到它们持久存储的机器。您可以找到有关的一些信息。
如果您能够承受丢失一些条目的代价,我想异步日志记录是可以的;或者类似于lmax中的disruptor,如果您绝对需要一致性,那么您的意思是使用另一个线程进行日志记录,我知道这个过程。然而,有时,甚至这些都会起到拖累作用。想知道是否有其他“更好”的机制来处理日志记录/跟踪。您是否在寻找一个在没有日志记录的情况下尽可能减少开销的系统?或者,您是否在寻找一种将实际写入日志的开销降至最低的方法?如果是后者,那么消息是否倾向于以很长的间隔聚集在一起,或者是否存在更严重的总吞吐量问题?让我换一种说法。我已经有了支持生产环境中X速度的系统(没有模块间跟踪、日志)。现在,我正试图找到一种方法来添加日志(整个系统)和跟踪,并试图将X的降级降到最低。