Es funktioniert nicht so. Sie benötigen eine Filterfunktion zur Verfügung zu stellen boost :: log :: trivial gemäß der Dokumentation:
http://www.boost.org/doc/libs/1_61_0/libs/log/doc/html/log/tutorial/trivial_filtering.html
void init()
{
logging::core::get()->set_filter
(
// here they've used a constant but you could use a global or
// a function
logging::trivial::severity >= logging::trivial::info
);
}
int main(int, char*[])
{
init();
BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
BOOST_LOG_TRIVIAL(info) << "An informational severity message";
BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
BOOST_LOG_TRIVIAL(error) << "An error severity message";
BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
return 0;
}
Das Objekt logging::core::set_filter
vergangen ist vom Typ boost::log::filter
Sie könnten genauso gut schreiben:
auto filt = logging::filter(logging::trivial::severity >= logging::trivial::info);
logging::core::get()->set_filter(filt);
filt
ist ein leichtes Funktionsobjekt, deren Aufgabe es ist, zu inspizieren die an sie gesendeten Attribute und gibt zurück, ob alle Tests mit diesen Attributen true
zurückgeben. In diesem Fall gibt es nur einen Test - logging::trivial::severity >= logging::trivial::info
.
Es ist die Aufgabe des Loggers, den Attributsatz zu erstellen und ihn an boost::log::core
zu übergeben, wenn er etwas ausgeben möchte.
Die lange und kurze davon ist, dass Sie die Protokollierungsstufe in Ihrer eigenen Variable verfolgen müssen. Hier ist eine Möglichkeit:
#include <iostream>
#include <boost/log/core.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/expressions.hpp>
namespace logging = boost::log;
int main(int, char*[])
{
// track your own variable here
logging::trivial::severity_level my_log_level = logging::trivial::trace;
// with this filter
auto filt = logging::filter(logging::trivial::severity >= my_log_level);
logging::core::get()->set_filter(filt);
BOOST_LOG_TRIVIAL(trace) << "A trace severity message";
BOOST_LOG_TRIVIAL(debug) << "A debug severity message";
BOOST_LOG_TRIVIAL(info) << "An informational severity message";
BOOST_LOG_TRIVIAL(warning) << "A warning severity message";
BOOST_LOG_TRIVIAL(error) << "An error severity message";
BOOST_LOG_TRIVIAL(fatal) << "A fatal severity message";
// now you have control
if (my_log_level <= logging::trivial::trace)
{
std::cout << "tracing\n";
}
return 0;
}
Dies beantwortet die Frage nicht. Es muss einen Weg geben, um beliebigen Code abhängig vom Schweregrad bedingt auszuführen. – bobeff
Wird die Antwort konkretisieren. Leider nehmen Sie falsch an –
@bobeff Antwort aktualisiert mit Beispiel, wie Sie Ihre eigene Protokollierungsstufe verfolgen –