Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Log-如何创建具有一个前端和两个后端的接收器_C++_Boost_Boost Log - Fatal编程技术网

C++ Log-如何创建具有一个前端和两个后端的接收器

C++ Log-如何创建具有一个前端和两个后端的接收器,c++,boost,boost-log,C++,Boost,Boost Log,我是Boost.Log的新手,我正在尝试配置一个日志系统,以便将日志保存在一个文件中,并能够在代码中访问日志 我设法让文件后端工作(文件名可以,旋转也可以),但现在我尝试添加可以在源代码中访问创建的日志的功能(我想在UI中显示它们) 我是否为此使用了额外的文本流后端?如果是这样,我如何向现有接收器添加另一个后端 以下是我所做的: logging::add_common_attributes(); logging::core::get()->set_filter(trivial::sever

我是Boost.Log的新手,我正在尝试配置一个日志系统,以便将日志保存在一个文件中,并能够在代码中访问日志

我设法让文件后端工作(文件名可以,旋转也可以),但现在我尝试添加可以在源代码中访问创建的日志的功能(我想在UI中显示它们)

我是否为此使用了额外的文本流后端?如果是这样,我如何向现有接收器添加另一个后端

以下是我所做的:

logging::add_common_attributes();
logging::core::get()->set_filter(trivial::severity >= trivial::trace);

// add a sink with file backend
auto fsSink = logging::add_file_log(
    keywords::file_name = "..\\Logs\\%Y%m%d_Tracing_%H%M%S.log",
    keywords::rotation_size = 2* 1024 * 1024,
    keywords::open_mode = std::ios_base::app);

// set format of log entries - example:
// 000001: [2021-04-07 08:03:21.368897] info    : Test message
// log entries have fix width for line id and severity so that all message are aligned
fsSink->set_formatter
(
    expr::stream <<
    std::right << std::setw(5) << std::setfill('0') << expr::attr<unsigned int>("LineID") <<
    ": [" << expr::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S.%f") << "] " <<
    std::left << std::setw(7) << std::setfill(' ') << trivial::severity << " : " <<
    expr::smessage
);

fsSink->locked_backend()->auto_flush(true);
logging::添加公共属性();
日志记录::核心::获取()->设置过滤器(平凡::严重性>=平凡::跟踪);
//添加带有文件后端的接收器
自动fsSink=logging::添加\u文件\u日志(
关键词::file_name=“..\\Logs\\%Y%m%d\u跟踪\u%H%m%S.log”,
关键词::旋转大小=2*1024*1024,
关键词::开放模式=标准::ios\U基础::应用程序);
//设置日志条目的格式-示例:
//000001:[2021-04-07 08:03:21.368897]信息:测试消息
//日志条目具有固定的行id宽度和严重性,以便所有消息都对齐
fsSink->set_格式化程序
(

expr::stream我不会为streams操心,而是实现您自己的接收器后端,将日志记录输出到您的UI。好的,谢谢您的提示。我的情况是,我的UI中有三个不同的列表框(分别用于错误、信息和调试严重性)我想根据严重程度填充。我将检查是否写入我自己的水槽。谢谢!
boost::shared_ptr<sinks::text_ostream_backend> backend =
    boost::make_shared<sinks::text_ostream_backend>();

backend->add_stream(boost::shared_ptr<std::ostream>(&std::clog, boost::null_deleter()));

boost::shared_ptr<sink_t> streamSink(new sink_t(backend));

streamSink->set_formatter(expr::stream <<
    ": [" << expr::format_date_time<boost::posix_time::ptime>("TimeStamp", "%Y-%m-%d %H:%M:%S.%f") << "] " <<
    expr::smessage);

streamSink->locked_backend()->auto_flush(true);
core->add_sink(streamSink);