2013-05-01 14 views
6

Próbuję uzyskać Boost.Log dzieje się w moim projekcie. Problem pojawia się w następnym wierszu z trywialny przykład:Boost.Log nie można ustawić filtru rejestrowania (nieokreślony identyfikator "istotność")

using namespace boost::log; 
core::get()->set_filter 
(
    trivial::severity >= trivial::info 
); 

W moim kodu, to przekłada się na następujący:

boost::log::core::get()->set_filter(
    boost::log::trivial::severity >= boost::log::trivial::info 
); 

Jednak uzyskać następujące błędy:

error C2039: 'severity' : is not a member of 'boost::log::v2s_mt_nt5::trivial' 
error C2065: 'severity' : undeclared identifier 

W pewnym sensie szukam wokół przestrzeni nazw, próbując dowiedzieć się, jak mam to zrobić, ale tak naprawdę nie znajduję niczego, co działa. Wygląda na to, że do tego potrzebna jest jakaś szalona funkcja lambda. W porządku z jakąś alternatywą (definiującą funkcję, która wypełnia poziom filtrowania?), Ale nie jestem pewien, jak to osiągnąć. Jakieś pomysły?

Używam Boost.Log w wersji 2.0-r862 i Boost 1.53.0.

ROZWIĄZANIE: Ryan wskazał, że powinienem sprawdzić mój obejmuje, i rzeczywiście byłem w tym tylko trivial.hpp, ale core.hpp i expressions.hpp są również wymagane jako obejmuje. Uwzględnienie ich rozwiązało problem.

// need at least these 3 to get "trivial" to work 
#include <boost/log/core.hpp> 
#include <boost/log/expressions.hpp> 
#include <boost/log/trivial.hpp> 
+0

Hej, aardvark, Mam problem filtrowania nasilenia. Moje pytanie jest tutaj: stackoverflow.com/q/29707017/1735836 – Patricia

Odpowiedz

2

Patrząc na trivial.hpp wydaje severity jest częścią przestrzeni nazw keywords. Czy próbowałeś boost::log::keywords::severity?

+0

Tak, też tego próbowałem. Niestety otrzymuję następujące: 'error C2784: 'std :: _ Boolarray std :: operator> = (const std :: valarray <_Ty> &, const std :: valarray <_Ty> &)': nie można wyprowadzić argumentu szablonu dla 'const std :: valarray <_Ty> & 'from' const boost :: parametr :: słowo kluczowe '' – aardvarkk

+0

Wygląda na to, że operator> = nie jest zdefiniowany dla typu słowa kluczowego? Myślę, że "słowo kluczowe o poziomie ważności" różni się od "poziomu ważności", więc ma to sens, że to nie działa ... – aardvarkk

+1

Hmm, czy możesz pokazać swoje załączniki? – Ryan

0

Oto pełna przykładów pracy w C++ 11, który podsumowuje @aardvarkk rozwiązanie:

#include <boost/log/expressions.hpp> 
#include <boost/log/core.hpp> 
#include <boost/log/trivial.hpp> 

namespace logging = boost::log; 

auto init() -> void 
{ 
    logging::core::get()->set_filter 
    (
     logging::trivial::severity >= logging::trivial::warning 
    ); 
} 

auto main(int argn, char *args[]) -> int 
{ 
    init(); 

    BOOST_LOG_TRIVIAL(info) << "Testing the log system"; 
    BOOST_LOG_TRIVIAL(error) << "Testing the log error"; 


    return 0; 
} 
Powiązane problemy