Ich verwende Boost 1.54.0. Unten finden Sie ein minimales Beispiel, das mein Problem veranschaulicht.Boost Log Schweregrad_logger Init_from_stream
Ich verwende den severity_logger Boost-Log. Ich möchte meine Senken aus einem Stream konfigurieren. (Im folgende Beispiel verwende ich eine string. In meiner realen Anwendung der Strom kommt aus einer Datei.) ich das% Severity% für die Ausgabe oder Filterzweck verwendet werden soll.
Mein Problem ist: Wenn ich es wie im Beispiel unten verwendet, % Schweregrad% ist leer.
% LineID% und% Message% werden als erwartet gefüllt. Wenn ich eine Senke wie in den Outcomment-Zeilen eingerichtet habe, 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;
}
Es wäre appeat dass Sie Boost Log anweisen müssen, 'Sinks.MySink' zu verwenden. Leider habe ich keine Erfahrung mit Boost Log Konfiguration – sehe
Das ist nicht das Problem. Es benutzt MySink. Das von mir bereitgestellte Format wird wie gewünscht verwendet. Ausnahme:% Schweregrad% wird durch eine leere Zeichenfolge ersetzt. Es sollte die Nummer des Enum-Wertes sein. Es funktioniert gut mit der Outcomment Art der Sink-Konfiguration. – SebastianK