代码如下
#define LOG_DEBUG(msg) \
{\
std::ostringstream _os;\
_os << msg << "\n";\
std::cout << _os.str();\
}
说明:
1. 头文件包含#include<sstream>
2. 支持日志的 "name : " << name<< "number : " << namber 形式的输入
原理
情况说明:
多线程并发情况下,使用std::cout << "hello" << "world";形式的连续输出经常出现中断,打印出类似乱码的东西,不容易看懂。
解决方案:
利用ostringstream 作为缓存,把字符串都放在ostringstream 中,利用std::cout输出时,可以一下子都把ostringstream 中的字符取出,整体输出,这样就不会出现中断的情况
尝试过但失败的方案:
利用线程同步机制,利用互斥锁解决输出中断的问题,障碍在于多个工程同时利用日志打印的时候,跨功能不能够引用互斥量,并且不断的申请释放锁,效率会降低。