gpt4 book ai didi

c++ - Boost Log 更改默认 logging::core 格式化程序?

转载 作者:太空狗 更新时间:2023-10-29 21:23:13 26 4
gpt4 key购买 nike

我正在使用 Boost v1.54,我想简单地更改 logging::core 的默认接收器格式,但还没有找到这样做的方法。在Log Record Formatting文档他们只展示了如何更改自定义接收器的格式,例如日志文件而不是默认文件?有没有办法在 Boost Log 中全局设置默认格式?

他们是这样做的:

void init()
{
logging::add_file_log
(
keywords::file_name = "sample_%N.log",
keywords::rotation_size = 10 * 1024 * 1024,
keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),
keywords::format = "[%TimeStamp%]: %Message%"
);

logging::core::get()->set_filter
(
logging::trivial::severity >= logging::trivial::info
);
}

这是我想要的:

void init()
{
logging::core::get()->set_default_format("[%TimeStamp%]: %Message%");
logging::core::get()->set_filter
(
logging::trivial::severity >= logging::trivial::info
);
}

最佳答案

不确定您为什么要这样做,因为没有什么重要的收获。这是不可能的,但这是有原因的。

如果您查看 boost_1_54_0/boost/log/core/core.hpp,它不允许设置除属性之外的任何内容 - 这本身就是一个很棒的功能。

回来,一个单独的接收器可以同时拥有多种类型的流。

  • 基于文本文件
  • 基于控制台
  • 或两者兼而有之(如果你想写一次,输出到文本文件和控制台)

对于核心,您可能只有一个接收器,您可以在其上添加任意数量的流。流可以根据您的要求而变化。但格式将适用于接收器 - 所有流。

下面是您如何看待这种关系:

  • One Core --> One Sink (With Format) --> Multiple Streams

您发布一次,它将以您应用的格式发送到所有流。

一个minor example来自同一个链接。

此外,还有一些使用多个流的示例代码。

    shared_ptr< std::ostream > strm(new std::ofstream("test.log"));
mSink->locked_backend()->add_stream(strm);
shared_ptr< std::ostream > pStream(&std::clog, logging::empty_deleter());
mSink->locked_backend()->add_stream(pStream);


mSink->set_formatter
(
expr::format("%1%:[%2%] %3%")
% expr::attr< boost::posix_time::ptime >("TimeStamp")
//% expr::attr< boost::thread::id >("ThreadID")
% expr::smessage
);

关于c++ - Boost Log 更改默认 logging::core 格式化程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18743567/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com