2016-07-27 8 views
1

출력 로그 메시지를 컬러 코딩하기 위해 사용자 정의 boost::log 포맷터를 사용하고 있지만, 타임 스탬프ThreadID 속성을 로그에 추가하는 방법을 찾지 못했습니다. 파일 로깅을 사용할 때는 keywords::format = "[%TimeStamp%] [%ThreadID%] [%Severity%]: %Message%"logging::add_file_log 매개 변수로 씁니다. 나는 다음과 같은 사용자 정의 포맷터 유사한 효과를 갖고 싶어 : 당신이 로그 레코드를 이러한 특성을 추가 한 점을 감안Custom boost :: log formatter로 TimeStamp 및 ThreadID 속성을 출력하는 방법은 무엇입니까?

void coloring_formatter(const logging::record_view& record, 
         logging::formatting_ostream& stream) 
{ 
    auto severity = record[logging::trivial::severity]; 
    assert(severity); 

    stream << "\e[1m"; 

    switch (severity.get()) 
    { 
    case logging::trivial::severity_level::trace: 
    stream << "\e[97m"; 
    break; 
    case logging::trivial::severity_level::debug: 
    stream << "\e[34m"; 
    break; 
    case logging::trivial::severity_level::info: 
    stream << "\e[32m"; 
    break; 
    case logging::trivial::severity_level::warning: 
    stream << "\e[93m"; 
    break; 
    case logging::trivial::severity_level::error: 
    stream << "\e[91m"; 
    break; 
    case logging::trivial::severity_level::fatal: 
    stream << "\e[41m"; 
    break; 
    } 

    stream // << output TimeStamp 
     // << output ThreadID 
     << "[" << severity << "] " 
     << record[logging::expressions::smessage] 
     << "\e[0m"; 
} 

답변

3

을, 그들을 추출하는 여러 가지 방법이 있습니다. 가장 간단한 방법은 keywords을 사용하는 것입니다. 먼저 속성에 대한 키워드를 선언하십시오.

BOOST_LOG_ATTRIBUTE_KEYWORD(a_timestamp, "TimeStamp", attrs::local_clock::value_type) 
BOOST_LOG_ATTRIBUTE_KEYWORD(a_thread_id, "ThreadID", attrs::current_thread_id::value_type) 

세 번째 매개 변수는 해당 속성의 값 유형입니다. 이 예제에서는 내가 사용한 속성이 local_clockcurrent_thread_id이라고 가정했습니다.

이제 이러한 키워드를 사용하여 로그 레코드에서 값을 추출 할 수 있습니다.

stream << record[a_timestamp] << " " 
     << record[a_thread_id] 
     << " [" << severity << "] " 
     << record[logging::expressions::smessage] 
     << "\e[0m";