如何使用C ++中的Boost日志库同时写入两个不同的文件?

时间:2019-05-07 11:45:02

标签: c++ logging boost

我正在使用Boost编写日志记录应用程序,我需要将两个不同的日志写入两个不同的文件中。例如我的性能日志将转到Performance.log文件,应用程序日志将转到application.log文件。

创建了两个file_sink_ptr,它们指向两个不同的文件。将接收器指针添加到核心。

使用单个接收器ptr,我正在记录每种类型的日志。

我看到创建了两个文件,并且两个文件都具有相同的日志。 我需要将应用程序日志记录在file1中并将性能日志记录在file2中。但是,这里没有发生隔离。应用程序日志和性能日志都将同时进入这两个文件。

请帮忙。

typedef boost::log::sinks::asynchronous_sink< boost::log::sinks::text_file_backend > file_sink;
typedef boost::shared_ptr< file_sink >  file_sink_ptr;
file_sink_ptr sinkptr1 = boost::make_shared<file_sink >(
        boost::log::keywords::file_name = fileName
        boost::log::keywords::target = dirName,
        boost::log::keywords::open_mode = std::ios_base::out | std::ios_base::app,
        boost::log::keywords::auto_flush = true);

sinkptr1->locked_backend()->set_file_collector(boost::log::sinks::file::make_collector(
        boost::log::keywords::target = dirName,
        boost::log::keywords::max_size = dirSize));


--------------2nd file
file_sink_ptr sinkptr2 = boost::make_shared<file_sink >(
        boost::log::keywords::file_name = fileName2
        boost::log::keywords::target = dirName,
        boost::log::keywords::open_mode = std::ios_base::out | std::ios_base::app,
        boost::log::keywords::auto_flush = true);

sinkptr2->locked_backend()->set_file_collector(boost::log::sinks::file::make_collector(
        boost::log::keywords::target = dirName,
        boost::log::keywords::max_size = dirSize));

sinkptr1->locked_backend()->scan_for_files();
    sinkptr2->locked_backend()->auto_flush();

boost::log::core::get()->add_sink(sinkptr1);
boost::log::core::get()->add_sink(sinkptr2);
LogData* ptr1 = new LogData();
ptr1->sinkPtr = sinkptr1;

LogData* ptr2 = new LogData();
ptr2->sinkPtr = sinkptr2;

----------------------------------------------
 struct LogData
    {
        boost::log::sources::logger         logger;
        file_sink_ptr                       sinkPtr;
    };


BOOST_LOG(ptr1 ->logger) << StringTextMessage1;
BOOST_LOG(ptr2 ->logger) << StringTextMessage2;

0 个答案:

没有答案