2013-05-01 36 views
6

Tôi đang cố gắng tăng Boost.Log trong dự án của mình. vấn đề này được đưa ra trong các dòng sau từ ví dụ tầm thường:Boost.Log không thể đặt bộ lọc nhật ký (số nhận dạng không khai báo 'mức độ nghiêm trọng')

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

Trong mã của tôi, điều này có nghĩa như sau:

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

Tuy nhiên, tôi nhận được các lỗi sau đây:

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

Tôi là loại tìm kiếm xung quanh các không gian tên đang cố gắng tìm hiểu làm thế nào tôi phải làm điều này, nhưng tôi không thực sự tìm thấy bất cứ điều gì hoạt động. Có vẻ như đó là một số chức năng lambda điên cần thiết cho việc này. Tôi không sao với một số thay thế (xác định một chức năng mà điền vào mức độ lọc?), Nhưng tôi không chắc chắn làm thế nào để thực hiện điều này. Bất kỳ ý tưởng?

Tôi đang sử dụng phiên bản Boost.Log 2.0-r862 và Boost 1.53.0.

SOLUTION: Ryan chỉ ra rằng tôi nên kiểm tra của tôi bao gồm, và chắc chắn đủ Tôi đã chỉ bao gồm trivial.hpp, nhưng core.hppexpressions.hpp cũng được yêu cầu như bao gồm. Bao gồm cả họ đã giải quyết được vấn đề.

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

Hey, lợn đất, tôi đang gặp rắc rối lọc mức độ nghiêm trọng. Câu hỏi của tôi là ở đây: stackoverflow.com/q/29707017/1735836 – Patricia

Trả lời

2

Nhìn vào trivial.hpp, nó xuất hiện severity là một phần của không gian tên keywords. Bạn đã thử boost::log::keywords::severity chưa?

+0

Vâng, tôi cũng đã thử điều đó. Thật không may tôi nhận được sau đây: 'lỗi C2784: 'std :: _ Boolarray std :: operator> = (const std :: valarray <_Ty> &, const std :: valarray <_Ty> &)': không thể suy luận đối số mẫu cho 'const std :: valarray <_Ty> & 'từ' const boost :: parameter :: keyword '' – aardvarkk

+0

Dường như toán tử> = không được định nghĩa cho loại từ khóa? Tôi nghĩ rằng "mức độ nghiêm trọng từ khóa" khác với "mức độ nghiêm trọng", do đó, nó có ý nghĩa rằng điều này không làm việc ... – aardvarkk

+1

Hmm, bạn có thể hiển thị bao gồm của bạn? – Ryan

0

Dưới đây là một ví dụ làm việc toàn trong C++ 11, tóm tắt @aardvarkk giải pháp:

#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; 
} 
Các vấn đề liên quan