我在boost-users 邮件列表上问了这个问题,但不幸的是从未得到回复。希望我在这里有更好的运气。
我正在尝试以文本方式指定格式(例如,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 声明的严重性相关的属性或格式化程序?我认为值得注意的是,如果我在第 123 行将模板参数删除到 severity_logger 以使其匹配:
src::severity_logger< > slg;
然后它会演变为标准 int 而不是 enum,并且输出被“正确”视为 - 作为 int 而不是人类可读的字符串。虽然现在这没问题,但如果可能的话,我当然希望它是人类可读的。这与 boost_1_55_0/libs/log/example/settings_file/main.cpp 中的示例一样。