Pie*_*tro 2 c++ logging mutex flush c++11
我写了这个记录器.它工作正常,但有一些我无法做到的事情.
uLOG(warning) << "Test log message " << 123 << uLOGE;
Run Code Online (Sandbox Code Playgroud)
uLOG锁定C++ 11互斥锁并开始在文件流上写入.
uLOGE刷新流并解锁互斥锁.
我想用这种语法得到相同的结果:
uLOG(warning) << "Test log message " << 123;
Run Code Online (Sandbox Code Playgroud)
所以我希望在行尾自动调用flush和unlock.
哪种方法可以做到?
ios::unitbuf标志,但这会强制每个<<操作员齐平,不适合SSD佩戴.它并没有解锁互斥锁.{ uLOG(warning) << 123; }您需要重新设计日志框架,因此这uLOG是一个您实例化的类,其析构函数可以完成uLOGE宏的工作.
很简单的例子:
struct uLOG
{
uLOG(std::string const& type)
{
std::cout << "Log: " << type << " - ";
}
template<typename T>
uLOG& operator<<(T const& output)
{
std::cout << output;
return *this;
}
~uLOG()
{
std::cout << " (end of log)" << std::endl;
}
};
// ...
uLOG("warning") << "log message" << 123;
Run Code Online (Sandbox Code Playgroud)
以上,在合适的程序中,应打印
Log: warning - log message123 (end of log)
此解决方案不应要求使用大括号,因此可以在单语句中使用非支撑if或循环.
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |