Как записать в два разных файла одновременно с использованием библиотек лога Boost в C ++? - PullRequest
0 голосов
/ 07 мая 2019

Я пишу приложение для ведения журнала, используя Boost, где мне нужно записать два разных журнала в два разных файла. Ex. Мой журнал производительности перейдет в файл Performance.log, а журнал приложения - в файл application.log.

Создано два file_sink_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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...