2016-10-29 2 views
0

내가 현재 coutTrainer 클래스의 출력에서 ​​로그 라인을 덤프 로그 싱크를 만드는거야 :부스트 :: 로그 싱크를 복사하고 바꿀 수 있습니까?

using namespace boost;              
    using namespace log;               
    using namespace expressions;             
    using namespace sinks;              

    auto sink = make_shared<synchronous_sink<text_ostream_backend>>();   

    sink->set_formatter(Utility::GetLoggingFormat());       

    sink->locked_backend()->add_stream(           
     shared_ptr<std::ostream>(&std::cout, null_deleter()));     
    sink->set_filter((               
     has_attr(Utility::ClassTag) &&           
     Utility::ClassTag == "App::Trainer"));         
    boost::log::core::get()->add_sink(sink);          

을하지만, 난 이미 모든 로그 라인을 덤프하는 (다른 곳 add_file_log를 호출하여) 싱크를 추가 한 파일로. 동일한 GetLoggingFormat() 포맷터를 사용합니다. 사실, 그 기능을 가지고있는 유일한 이유는 포맷터 코드를 반복 할 필요가 없기 때문입니다.

대신 파일 싱크 (add_file_log으로 다른 위치에서 생성 됨)를 "복사"하고 출력을 std::cout으로 변경하고 필터를 추가하는 것을 선호합니다.

이 작업을 수행 할 수 있습니까?

답변

1

아니요, 할 수 없습니다. 싱크는 복사 할 수 없으며 실제로 add_file_log으로 생성 된 싱크는 text_ostream_backend이 아니라 text_file_backend을 사용합니다. text_file_backendstd::cout으로 출력하도록 구성 할 수 없습니다.

가장 좋은 방법은 이미 수행 한 것처럼 함수를 사용하거나 formatter 개체에 포맷터를 캐시하여 두 싱크에 모두 설정하는 것입니다.