我正在使用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;