Sto usando boost 1.54.0. Di seguito puoi trovare un esempio minimo che illustra il mio problema.Boost log severity_logger init_from_stream
Uso severity_logger del registro di potenziamento. Voglio configurare i miei sink da uno stream. (Nell'esempio seguente utilizzo uno strings. Nella mia vera applicazione il flusso proviene da un file.) Voglio usare% Gravità% per scopi di output o di filtraggio.
mio problema è: se lo uso come indicato nel seguente esempio, % Gravità% è vuoto.
% LineID% e% Message% vengono riempiti come previsto. Se imposto un sink come indicato nelle linee in uscita, funziona come previsto.
Qualche idea?
#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;
}
Sarebbe appeat che è necessario istruire Boost Log per utilizzare effettivamente 'Sinks.MySink'. Purtroppo non ho esperienza con la configurazione di Boost Log – sehe
Questo non è un problema. Sta usando MySink. Il formato I fornito viene utilizzato come desiderato. Tranne:% Severity% è sostituito da una stringa vuota. Dovrebbe essere il numero del valore enum. Funziona alla perfezione con il modo in cui si verifica la configurazione del sink. – SebastianK