线程安全的日志类设计

最近在写多线程方面的内容, 其实多线程开发设计清楚了在写, 并不会有太大的坑, 尽管如此, 难免有需要调试的时候, 多线程的程序单步调试有时候难以发现bug, 通过记录日志, 可以用来查找问题, 方便调试.

其实有不少开源的C++日志库, 比如大名鼎鼎的log4cxx, 轻量级的glog, 还有一些热心的同行提供的开源工程, 我大体看了几个, 觉得不是很符合我的胃口, 于是就花了一天的时间, 自己写了一个, 用起来还比较顺手, 想怎么改就怎么改, 目前还是比较适合需求的.

考虑到线程安全, 就有很多要注意的地方, 比如两个线程同时用std::cout来输出信息, 几乎总是会出现冲突, 而处于性能等方面的考虑, 标准库并不提供线程安全的输入输出流, 自己实现一个线程安全的类似的库, 工作量也不小, 我就避开了这个问题, 沿用原来的类, 但是在输出的时候, 每次只能输出一条日志, 不管有多少个线程, 他们写日志的时候, 也是一次写完一条, 然后压入日志缓冲区间, 通过日志线程, 不断的从缓冲区间取出日志, 并输出到控制台上, 同时IO交由日志线程来处理, 不会耽误主线程的时间. 唯一加锁的地方, 就是日志缓冲区那里, 这样会导致多少性能损失, 之后再详细分析一下.

关于字符串格式化, 这个有各种方式, 有printf风格的, 有流风格的, 简单的情况下, 流风格<<, 还可以用, 太复杂的格式化, 就过于繁琐了, sprintf, 不够安全, 可以使用更加安全的函数, 也可以使用boost::format, 方便实用跨平台, 虽然效率比起printf和stringstream都慢了点.

 

 

转载于:https://www.cnblogs.com/BladeWorld/p/4289431.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值