我想使用一个变量来控制许多boost::log调用来切换不同的BOOST_TRIVIAL_LOG(lvl)严重性级别。

// Class header
const boost::log::trivial::severity_level _LVL_DEBUG;

// Class ctor initialize list
#ifdef FOO_MACRO
        _LVL_DEBUG(boost::log::trivial::severity_level::info)
#else
        _LVL_DEBUG(boost::log::trivial::severity_level::debug)
#endif

// Class method
BOOST_LOG_TRIVIAL(_LVL_DEBUG) << "Foo bar";


但是当g ++编译我得到


  错误:“ _ LVL_DEBUG”不是“ boost :: log :: v2s_mt_posix :: trivial”的成员


我想知道我错过了重点。

编辑1

boost::log::trivial::info相同的输出(或其他级别的c)

最佳答案

目前尚不清楚您要做什么。 BOOST_LOG_TRIVIAL(x)将严重性级别x扩展为boost::log::trivial::severity_level::x,其中severity_level是一个枚举,而x应该是该枚举的值。

如果要在编译时控制严重性级别,则要做的就是这样定义宏:

#ifdef FOO_MACRO
#define _LVL_DEBUG info
#else
#define _LVL_DEBUG debug
#endif


然后,您可以在日志记录语句中使用它,如下所示:

BOOST_LOG_TRIVIAL(_LVL_DEBUG) << "Foo bar";


如果要运行时控制,则不能再使用BOOST_LOG_TRIVIAL,而必须使用BOOST_LOG_SEV或直接采用严重性级别的其他宏。这也意味着您必须自己创建和管理记录器。

08-17 03:34