我们有可以在silence mode
和print mode
上运行的守护进程(打印到std::cout)。如何在没有开销和 io 调用的情况下使其silence
。建议更多更好的方法!或者写什么方法更好!(优点/缺点)
例如:
1 方式:
代码std::cout << "blah-blah-blah: " << var << std::endl;
的简单位置 何时需要沉默close(STDOUT_FILENO)
或重写 cout 以dev/null
(如何?
2 路
使用global bool FLAG_SILENCE
并在每次通话前检查它:if (!FLAG_SILENCE) std::cout << "blah-blah-blah: " << var << std::endl;
3 路预定义的宏#define SILENTCOUT std::cout
何时需要静音#define SILENTCOUT SOMETHING
(某些东西=某些具有运算符<<
并且没有不执行任何操作的过硬(does not know how to realise, seems need to define our own function with defined
<<的功能)
4 路使用SILENTCOUT( "mess" )
预定义的宏#define SILENTCOUT(x) std::cout << x << std::endl
-- 危险,非常丑陋
一个常见的解决方案是提供包含if
和实际打印的宏:
#define LOG( msg )
if ( !log_enabled ) {} else
std::cout << msg;
尽管通常宏稍微复杂一些(例如,与其测试log_enabled
采用日志级别,不如将其与预定义的级别进行比较并相应地记录)。
某些库使用宏选项,该宏返回实现operator<<
的记录器对象,并根据配置提供适当的记录器或仅忽略参数的无操作接收器。这可能性能稍差,因为这至少需要函数调用operator<<
。
无论如何,我建议您使用日志记录库,因为这些问题已经解决了很多次。