2013-05-01 4 views
6

Sto cercando di ottenere Boost.Log andando nel mio progetto. Il problema si presenta nel seguente riga dalla esempio banale:Boost.Log impossibile impostare il filtro di registrazione (identificatore non dichiarato 'severity')

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

Nel mio codice, questo si traduce al seguente:

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

Tuttavia, ottengo i seguenti errori:

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

Sto esplorando gli spazi dei nomi cercando di scoprire come dovrei farlo, ma non trovo davvero nulla che funzioni. Sembra che per questo sia necessaria una pazza funzione lambda. Sto bene con qualche alternativa (definendo una funzione che riempie il livello di filtraggio?), Ma non sono sicuro di come farlo. Qualche idea?

Sto utilizzando Boost.Log versione 2.0-r862 e Boost 1.53.0.

SOLUZIONE: Ryan ha sottolineato che dovrei controllare la mia include, e abbastanza sicuro che stavo soltanto compreso trivial.hpp, ma core.hpp e expressions.hpp sono anche richiesti come include. Compresi quelli hanno risolto il problema.

// 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

Ehi, oritteropo, sto avendo difficoltà a filtrare la gravità. La mia domanda è qui: stackoverflow.com/q/29707017/1735836 – Patricia

risposta

2

Guardando trivial.hpp, sembra severity fa parte della keywords namespace. Hai provato boost::log::keywords::severity?

+0

Sì, ho provato anche quello. Sfortunatamente ottengo il seguente messaggio: 'errore C2784: 'std :: _ Boolarray std :: operator> = (const std :: valarray <_Ty> &, const std :: valarray <_Ty> &)': impossibile dedurre argomento modello per 'const std :: valarray <_Ty> & 'da' const boost :: parametro :: parola chiave '' – aardvarkk

+0

Sembra che l'operatore> = non sia definito per il tipo di parola chiave? Penso che la "parola chiave del livello di gravità" sia diversa da un "livello di gravità", quindi è logico che ciò non funzioni ... – aardvarkk

+1

Hmm, puoi mostrare il tuo include? – Ryan

0

Ecco un esempio di lavoro completa in C++ 11, che riassume @aardvarkk soluzione:

#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; 
}