Boost日志:日志设置文件和代码配置的交互
Boost Log: Interaction of log settings file and code configuration
我有一个很好的格式和控制台日志:
auto fmtStream = expressions::stream
<< "LineID: " << expressions::attr<unsigned int>("LineID") << " "
<< "Message: " << expressions::message:
boost::log::add_console_log(std::cout, keywords::format = fmtStream);
格式流当然有点长…现在我想让一个用户配置日志记录:
std::ifstream file("log.conf");
init_from_stream(file);
fmtStream中使用的许多格式化是不可能使用配置文件中的格式字符串的。
我如何给用户修改控制台接收器的可能性,例如添加一个过滤器?但是我想保留格式字符串作为默认值。
我看到的可能性:
1)给我在代码中定义的控制台日志一个名称。用户现在可以使用同名的接收器修改它。
2)设置所有sink采用的默认格式。但是根据Boost Log改变默认的logging::core格式化器?这是不可能的。
3)还有其他想法吗?
谢谢!
init_from_stream
和init_from_settings
函数将按照设置中指定的方式初始化库。这些函数被设计为从头配置库,因此它们将添加具有指定设置的新接收器,包括过滤器和格式化器。如果你只需要为现有的接收器定制格式化程序,而不允许完整的日志记录配置,那么你应该自己解释设置文件。
可以使用parse_settings
函数解析设置文件。从中,您将收到settings
(或wsettings
)对象,您可以像这里和这里所描述的那样对其进行分析和修改(对不起,参考文档中的格式不好)。由于您可能不打算支持Boost.Log支持的所有接收器和参数,因此您不需要绑定到Boost.Log放入参数的语义,并且可以以任何您想要的方式解释设置。例如,您可以选择只读取接收器格式化程序:
boost::log::settings setts = boost::log::parse_settings(file);
if (boost::optional<std::string> fmt = setts["MySink"]["Format"])
{
// Sink format is specified in the setting file
}
现在,要将该格式字符串转换为格式化程序,您将需要parse_formatter
函数(这里描述了字符串格式)。此函数返回一个格式化器对象,您可以将其安装到接收器中,前提是您保存了指向该对象的指针。
auto sink = boost::log::add_console_log(std::cout, keywords::format = fmtStream);
boost::log::settings setts = boost::log::parse_settings(file);
if (boost::optional<std::string> fmt = setts["MySink"]["Format"])
{
sink->set_formatter(boost::log::parse_formatter(fmt.get()));
}
还有一件事要记住。如果您在格式化程序中使用自定义类型的属性值,例如用于严重性的enum,则必须在解析格式化程序之前在库中注册这些类型。这样,解析器就能够创建一个知道类型并使用适当格式化操作符的格式化器。有一个教程描述了如何做到这一点
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 无法找到/读取配置文件.conf-FileIOException
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 一种在C++中读取TXT配置文件的简单方法
- 生成MRPT库时cmake配置失败
- FFMPEG配置文件级别id大小无效
- 如何通过Conan和CMake找到用于pkg配置的.pc文件
- 配置文件解析器仅返回以前的值
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 是否可以配置提升日志刷新?
- 配置 log4cpp 日志记录级别优先级
- 独立 exe:磁盘上保存配置文件和日志的位置
- 使用boost ::日志配置文件变量
- 如何在配置文件中自定义用于提升日志的过滤器
- Boost日志:日志设置文件和代码配置的交互
- Boost日志在使用配置文件时不显示严重性或按严重性过滤
- 为c++配置google日志和gflags
- log4cplus 是否支持 xml 配置文件和条件日志记录
- 如何从配置中设置boost日志严重级别?