Erhöhen Sie das Protokoll severity_logger init_from_stream

Ich benutze Boost 1.54.0. Unten finden Sie ein minimales Beispiel, das mein Problem veranschaulicht.

Ich benutze den severity_logger von boost log. Ich möchte meine Senken aus einem Stream konfigurieren. (Im folgenden Beispiel verwende ich einen Stringstream. In meiner realen Anwendung stammt der Stream aus einer Datei.) Ich möchte den% Severity% für Ausgabe- oder Filterzwecke verwenden.

MeineProblem ist: Wenn ich es wie im folgenden Beispiel angegeben verwende,% Severity% ist leer.

% LineID% und% Message% werden wie erwartet gefüllt. Wenn ich ein Waschbecken wie in den Kommentaren angegeben einrichte, funktioniert es wie erwartet.

Irgendwelche Ideen?

#include <boost/log/sources/severity_logger.hpp>
#include <boost/log/sources/record_ostream.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/utility/setup/from_stream.hpp>
#include <boost/log/utility/setup/console.hpp>
#include <boost/log/expressions.hpp>

enum SeverityLevel { trace, fatal };

int main (int argc, char *argv[])
{
    boost::log::add_common_attributes();
    /*
    struct severity_tag;
    boost::log::add_console_log(std::clog,
        boost::log::keywords::format = (
            boost::log::expressions::stream
                << boost::log::expressions::attr< unsigned int >("LineID")
                << ": <" << boost::log::expressions::attr<SeverityLevel, severity_tag >("Severity")
                << "> " << boost::log::expressions::smessage)
    ); */

    std::stringstream s;
    s << "[Sinks.MySink]" << std::endl;
    s << "Destination=Console" << std::endl;
    s << "Format=\"%LineID%: <%Severity%> - %Message%\"" << std::endl;
    boost::log::init_from_stream(s);

    boost::log::sources::severity_logger<SeverityLevel> lg;
    BOOST_LOG_SEV(lg, trace) << "This is a trace message";
    BOOST_LOG_SEV(lg, fatal) << "This is a fatal message";
    return 0;
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage