如何设置升压以将不同数据记录在2个不同文件中

时间:2019-02-14 18:51:17

标签: boost

几天以来,我一直在尝试设置c ++ boost以将不同数据记录在2个不同文件中。 我设法得到的是不同的文件,它们共享相同的内容 下面的代码在日志文件夹中创建了两个文件,文件file.txt和file2.txt具有相同的内容:

file.txt 

0: [2019-Feb-14 19:39:01.997479] - thread 2
1: [2019-Feb-14 19:39:02.035582] - thread 1

file2.txt
0: [2019-Feb-14 19:39:01.997479] - thread 2
1: [2019-Feb-14 19:39:02.035582] - thread 1


class logger
{
    src::logger_mt lg;
public:
    logger(std::string filename)
    {
        // Create a text file sink
        typedef sinks::synchronous_sink< sinks::text_multifile_backend > file_sink;
        shared_ptr< file_sink > sink(new file_sink);


        // Set up how the file names will be generated
        sink->locked_backend()->set_file_name_composer(sinks::file::as_file_name_composer(
            expr::stream << "logs/" << filename));

        // Set the log record formatter
        sink->set_formatter
        (
            expr::format("%1%: [%2%] - %3%")
            % expr::attr< unsigned int >("RecordID")
            % expr::attr< boost::posix_time::ptime >("TimeStamp")
            % expr::smessage
        );

        // Add it to the core
        logging::core::get()->add_sink(sink);


        // Add some attributes too
        logging::core::get()->add_global_attribute("TimeStamp", attrs::local_clock());
        logging::core::get()->add_global_attribute("RecordID", attrs::counter< unsigned int >());

    }
    void log(std::string message)
    {
        BOOST_LOG(lg) << message;
    }    
};
logger logger1("file2.txt");
logger logger2("file.txt");
// This function is executed in a separate thread
int main(int argc, char* argv[])
{
    logger2.log("thread 2");
    logger1.log("thread 1");
    return 0;
}

我知道这是一个基本问题,但是我从boost发行版libs \ log \ example中读取了所有示例,但找不到类似的东西。 感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

请参见this的答案,尤其是有关渠道和过滤器的前半部分。