Boost log select target file

Is it possible to enter severe files with one instance of Boost log.

I mean, can I specify in which file the log will be written:

BOOST_LOG_..(...) << "aaa" <- go to **A.log**
BOOST_LOG_..(...) << "bbb" <- go to **B.log**
+3
source share
1 answer

Yes, maybe with filters .

How you do this depends on your preference, but here is an example with logger tags:

void SomeFunction()
{
    {
        // everything in this scope gets logged to A.log
        BOOST_LOG_SCOPED_LOGGER_TAG(lg, "Log", std::string, "LogA")
        BOOST_LOG(lg) << "aaa";
        BOOST_LOG(lg) << "aaa2";
    }

    {
        // everything in this scope gets logged to B.log
        BOOST_LOG_SCOPED_LOGGER_TAG(lg, "Log", std::string, "LogB")
        BOOST_LOG(lg) << "bbb";
        BOOST_LOG(lg) << "bbb2";
    }
}

// This is your log initialization routine
void InitLogs()
{

    // Initialize sinkA to use a file backend that writes to A.log and sinkB to B.log.
    // ...
    // ...

    // Make sink A only accept records with the Log attribute "LogA"
    // while sink B will only accept records where it is "LogB".
    sinkA.set_filter(flt::attr<std::string>("Log") == "LogA");
    sinkB.set_filter(flt::attr<std::string>("Log") == "LogB");
}
+1
source

All Articles