大佬教程收集整理的这篇文章主要介绍了配置 Boost.Log v2,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 Boost.Log V2 1.75.0 并使用 boost::log::init_from_stream(config);
是否可以通过配置文件声明彩色控制台接收器,或者有什么方法可以将彩色输出添加到控制台?
现在,我添加了与 Boost Trivial Logger 中可用的日志级别一样多的控制台接收器,并按不同的级别过滤它们,但我不认为这是正确的方法。示例:
[Sinks.ConsoleSinkTrace]
DesTination=Console
Filter="%severity% = trace"
Format="\033[0;35m[%timestamp%] [%ProcessID%] [%ThreadID%] [%severity%] - %@R_607_8798@ge%\033[0m"
Asynchronous=false
autoFlush=true
[Sinks.ConsoleSinkDeBUG]
DesTination=Console
Filter="%severity% = deBUG"
Format="\033[0;34m[%timestamp%] [%ProcessID%] [%ThreadID%] [%severity%] - %@R_607_8798@ge%\033[0m"
Asynchronous=false
autoFlush=true
...等等...
更新
我找到了@AndreySemashev 建议的 SO 帖子,但我真的不明白,如何将其纳入我的项目: 我的主要期望是我想通过文件配置 Boost.Log,所以:
sink
是一个控制台类型的接收器,如果配置文件中没有这样的部分,它将不会被实例化)sink->set_formatter(&coloring_formatter);
这些观察是正确的,还是我遗漏了什么?
谢谢
another answer 中描述了创建具有着色支持的格式化程序,这里我将重点介绍如何将该格式化程序合并到设置文件中。
Boost.Log 支持通过 registering sink factories 扩展其设置文件解析器,您可以在您的情况下利用它。由于您可以将 text_ostream_BACkend
重用于输出,因此您不必实现新的接收器,但您确实需要自定义其配置。
class colored_console_factory :
public logging::sink_factory< char >
{
public:
// Creates the sink with the provided parameters
boost::shared_ptr< sinks::sink > create_sink(setTings_section const& setTings)
{
typedef sinks::text_ostream_BACkend BACkend_t;
auto BACkend = boost::make_shared< BACkend_t >();
BACkend->add_stream(
boost::shared_ptr< std::ostream >(&std::clog,boost::null_deleter()));
// Read setTings and configure the BACkend accordingly
if (auto auto_flush = setTings["AutoFlush"])
BACkend->auto_flush(*auto_flush == "1" || *auto_flush == "true");
auto sink =
boost::make_shared< sinks::synchronous_sink< BACkend_t > >(BACkend);
// You can reuse filter and formatter parsers provided by Boost.Log
if (auto filter = setTings["Filter"])
sink->set_filter(logging::parse_filter(*filter));
if (auto format = setTings["Format"])
{
logging::formatter fmt = logging::parse_formatter(*format);
// Wrap the parsed formatter with coloring
sink->set_formatter(coloring_formatter(std::move(fmt)));
}
return sink;
}
};
在上面,coloring_formatter
是一个函数对象,它在输出中用着色前缀和后缀包装解析的格式化程序。函数对象必须具有格式化程序的标准签名。
class coloring_formatter
{
public:
typedef void result_type;
typedef basic_formatTing_ostream< char > stream_type;
public:
explicit coloring_formatter(logging::formatter&& fmt) :
m_fmt(std::move(fmt))
{}
result_type operator() (
logging::record_view const& rec,stream_type& strm) const
{
// Output coloring prefix
auto severity = rec[logging::trivial::severity];
if (severity)
{
switch (severity.get())
{
...
}
}
// Let the wrapped formatter produce its output
m_fmt(rec,strm);
// Output coloring suffix
if (severity)
{
...
}
}
private:
logging::formatter m_fmt;
};
有关 coloring_formatter
实现的详细信息,请参阅我之前提到的答案。
以上是大佬教程为你收集整理的配置 Boost.Log v2全部内容,希望文章能够帮你解决配置 Boost.Log v2所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。