我在boost-users mailing list上问过这个问题,但遗憾的是没有回复。希望我在这里能有更好的运气。
我正在尝试以文本方式指定格式(例如,keywords :: format =“blahblah”,而不是使用已编译的表达式)。
这个想法是可以通过命令行参数或通过配置文件轻松地重新配置格式,而无需重新编译。但是,似乎在使用自定义severity_level枚举时指定%Severity%的任何内容都根本不会输出。
以boost_1_55_0 / libs / log / example / keywords / main.cpp
为例只需将第86行更改为:
logging::add_console_log(std::clog, keywords::format = "%Severity% %TimeStamp%: %_%");
会出现我认为我想解决的问题。
我怀疑核心不了解自定义Severity属性,因为它尚未注册,因此无法将%Severity%解析为任何格式化程序。相比之下,下面的add_file_log正确输出严重性级别,因为它使用了编译表达式,因此能够推断出需要做什么(我在这个假设中是否正确)?
我似乎无法在不滚动自己的属性类的情况下添加属性来解决此问题。如何添加与使用BOOST_LOG_ATTRIBUTE_KEYWORD声明的Severity相关的属性或格式化程序?我认为值得注意的是,如果我在第123行删除了severity_logger的模板参数,以便它匹配:
src::severity_logger< > slg;
然后将其转换为标准的int而不是enum,输出被“正确”看到 - 作为int而不是人类可读的字符串。虽然现在这是可以的,但我当然希望它在可能的情况下是人类可读的。这与boost_1_55_0 / libs / log / example / settings_file / main.cpp中的示例相同。