2014-01-29 3 views
6

Angenommen, ich eine einfache boost.log severity_logger Logger wie folgt aufgebaut haben:Schweregrad von boost.log Logger ..?

logging::core::get()->set_filter(logging::trivial::severity >= logging::trivial::debug); 
    logging::add_common_attributes(); 
    src::severity_logger<logging::trivial::severity_level> logger; 

Wie würde ich die Schwere programmatisch überprüfen?
I.e. etwas wie logger.getSeverity() ..?

Ich habe die Dokumente und andere Fragen hier auf StackOverflow gesiebt, aber konnte einfach nicht finden, was eine einfache API-Aufruf sein sollte ..?

Antwort

5

Ich würde sagen, Sie können nicht. Das Logging-System ist in drei Schichten geschichtet (siehe Design overview des Logging-Systems).

  • Ihr severity_logger ist eine Quelle Logger mit Attribut severity_level innerhalb der Datensammelschicht.

  • Der mit logging::core::get()->set_filter(...) festgelegte Schweregrad ist ein Funktionsobjekt, das für den Protokollierungskern festgelegt wurde. Alle an einen Logger gesendeten Nachrichten werden von diesem Funktionsobjekt gefiltert, bevor sie an die Senken übergeben werden.

So gibt es eigentlich nicht so etwas wie severity ist die severity_logger. Der Schweregrad wird nur an den Kern und dann an die Senken weitergegeben.


EDIT: auf meinen Kommentar Ausarbeiten, können Sie auch eine Variable severityLevel erklären und an die set_filter Funktion übergeben (Referenz-Wrapper des Boost-boost::ref() mit)

// defined somewhere: 
logging::trivial::severity_level severityLevel = logging::trivial::info; 

// passed to set_filter() by reference 
logging::core::get()->set_filter(
    logging::trivial::severity >= boost::ref(severityLevel)); 

// try out the logging: 
BOOST_LOG_SEV(logger, warning) << "A warning severity message"; // not filtered out 
severityLevel = logging::trivial::error; 
BOOST_LOG_SEV(logger, warning) << "Another warning message"; // filtered out 
+0

Hmm .. interessant. Also müsste ich alles, was an boost.log übergeben wird, über 'set_filter()' in meiner Wrapper-Klasse speichern. – cacau

+0

Es hängt davon ab, was Sie erreichen wollen. Das Filterfunktionsobjekt könnte auch mit einer eigenen Funktion initialisiert werden, deren Verhalten von einer Variablen abhängen könnte (siehe Klasse boost :: logging :: filter). –

+0

@mr_georg und cacau, ich habe Probleme beim Filtern der Schwere. Meine Frage ist hier: stackoverflow.com/q/29707017/1735836 – Patricia