c++ - 速度关键系统的设计跟踪/日志

标签 c++ design-patterns logging architecture

假设我们有速度关键的系统(例如统计/分析、套接字编程等),我们如何设计跟踪和日志。

更具体地说,日志和跟踪通常会降低性能(即使我们有关闭机制或冗长的扩展机制)。在这种情况下,是否有任何关于如何“放置”日志/跟踪的引用指南,以便在问题发生时(尤其是在生产现场)开发人员/后期制作团队能够查明实际问题。

PS:我来自使用 C/C++(在 Linux 上运行)开发此类应用程序的背景

最佳答案

您可以在缓冲区内累积日志,您可以使用 Google Protocol Buffers 描述和实现它.您可以让不同的线程定期(每 5 分钟)将此缓冲区清空到磁盘或通过 UNIX domain socket 发送它(或其他 Linux IPC mechanisms )到一个守护程序,该守护程序监听并将它们写入持久数据库或只是将它们写入磁盘。

如果你不想在产生日志的机器上打磁盘,你可以通过regular socket将它们发送到不同的机器上。并将它们写入该机器上的磁盘。

如果您要聚合多台机器的日志,请考虑使用 0MQCrossRoads作为消息队列将您的日志通过网络传递到永久存储它们的机器。您可以找到有关 using 0MQ in conjuction with Google Protocol Buffers here 的一些信息.

关于c++ - 速度关键系统的设计跟踪/日志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15498785/

相关文章:

c++ - 在 Sublime Text 3 编译器选项中启用 -pthread

c++ - 为除 qmake 中的一个文件之外的所有文件设置 "treat warnings as errors"

c++ - 协助代码组织?

python - Scrapy:在没有 ScrapyFileLogObserver() 的情况下记录到文件

python - python 网络应用程序中的自动注销

go - 使用 1) 自定义配置和 2) lumberjack 进行 zap 日志记录

c++ - 为什么当只有一个文件的选项发生变化时 CMake 会重新编译所有库源代码?

C++ - 在输出文件中打印不需要的字符

php - 如何在 PHP 中继承单例?

c - 使用最高有效位来标记 union 是否被认为是一种不好的做法?