To be or not to be - that is the question.现在我们正处于技术大爆发的时代 , 每一个技术领域中都有很多好的解决方案 。因此 , 自己完全不需要、也不应该去写日志框架 。就像不应该写版本控制工具或 Bug 跟踪管理工具一样 , 其他人已经把这些东西搞出来了 , 而且搞的很好 , Git、SVN , Bugzilla、Trac……应有尽有 , 我们完全可以花很少的钱 , 甚至是免费使用它们 。
所以 , 请避免重复劳动 , 不要去重新发明轮子 。应该坚持在自己的领域解决问题 , 将时间花在刀刃上 。话虽如此 , 但我们还是需要了解关于轮子的一些细节(谁造的?怎么创造的?如何使用?) , 以从中接受灵感 , 并把自己的知识加进去 。
因此 , 当需要一个日志框架时 , 应该使用现有的框架 , 而不是去重新发明轮子 。那么 , 问题来了 , 日志框架都有哪些呢?
日志框架都有哪些C++ 中的日志框架有很多 , 其中比较著名的有:
- log4cxx:Java 社区著名的 Log4j 的 C++ 移植版 , 用于为 C++ 程序提供日志功能 , 以便开发者对目标程序进行调试和审计 。
- log4cplus:一个简单易用的 C++ 日志记录 API , 它提供了对日志管理和配置的线程安全、灵活和任意粒度控制(也基于 Log4j) 。
- Log4cpp:一个 C++ 类库 , 可以灵活地记录到文件、syslog、IDSA 和其他目的地(也基于 Log4j) 。
- google-glog:一个 C++ 语言的应用级日志记录框架 , 提供了 C++ 风格的流操作和各种辅助宏 。
- PantheIOS:一个类型安全、高效、泛型和可扩展性的 C++ 日志 API 库(号称 C++ 领域速度最快的日志库) 。
- POCO:还提供了一个 好的日志支持文档 。
- ACE:ACE 也有日志支持 。
- Boost.Log:设计的非常模块化 , 并且可扩展 。
- Easylogging++:轻量级高性能 C++ 日志库(只有一个头文件) 。
- G3log:一个开源、支持跨平台的异步 C++ 日志框架 , 支持自定义日志格式 。基于 g2log 构建 , 提升了性能 , 支持自定义格式 。
- Plog:可移植、简单和可扩展的 C++ 日志库 。
- spdlog:一个快速的 C++ 日志库 , 只包含头文件 , 兼容 C++11 。
- ……
【一文详解 C++ 框架:日志框架】由于每个人的需求和技术栈都不一样 , 所以很难直接回答这个问题 , 但是有一些选择标准可供参考 。
日志选择标准
- 易用性
易于使用的框架 , 能让你事半功倍 。易用性 , 是优秀框架的一个重要特性 。所以无论使用什么框架 , 都应优先考虑这一点 。
对于日志框架而言 , 一旦被选定 , 在后期开发过程中 , 项目组中的每个人都会频繁使用 。如果易用性不好的话 , 那绝对是一个噩梦!所以 , 在选择日志框架时 , 应尽量找那些由简单、直观的 API 实现的方案 。一个简单日志框架 , 衡量标准可参考:对于缺乏经验的团队成员 , 应该在查看文档和简单示例之后 , 就能够快速上手 。
- 性能(效率)
功能决定现在 , 性能决定未来 。另一个要考虑的重要因素是性能影响 。正如上面提到的 , 我们会经常调用日志 , 这可能会对程序的性能产生巨大的影响 。
想象一下 , 一个日志框架 , 需要花费很长的时间才能启动 , 在每次调用时阻塞并执行文件 I/O , 缺少缓冲机制……对于这样的框架 , 你会用吗?
因此 , 在评估日志框架时 , 可以参考网上的一些文章来比较 , 也可以自己做一些比较性实验(基准测试) , 例如:吞吐量——测量每秒可以完成多少次方法调用(越高越好);采样——测量每次调用执行究竟花费了多少时间(越低越好) 。
- 对现有代码的影响
影响越小 , 越容易维护 。在以后的使用中 , 日志将无处不在 。就像会影响运行时性能一样 , 它们也会影响源码的可维护性 。
推荐阅读
- Pyppeteer爬虫神器详解
- Linux文件系统EXT2,EXT3,ReiserFS详解
- 亡羊补牢告诉我们只要及时改正-亡羊补牢一文告诉我们的道理是只要肯接受意见认真改正-
- 数码相机选购方法详解
- 一文彻底读懂MySQL事务的四大隔离级别
- 详解客厅镜子风水知识及讲究
- enum在c++语言中是什么意思?c语言enum用法是什么意思
- MySQL详解:索引的介绍和原理分析
- 网络/命令行抓包工具tcpdump详解
- 一通百通,一文实现灵活的 K8S 基础架构
