2013-08-31 2 views
8

Boost.Log does not support fork(). 이 종류의 믿을이지만, ticket comment이 해결 방법에 대해 설명합니다포크에 부스트 로그 라이브러리를 다시 초기화하는 방법은 무엇입니까?

[..] 그래서 지금은 분기점에서 라이브러리를 다시 초기화 사용자에게 달려 있습니다. pthread_atfork를 사용하여 이러한 재 초기화를 수행 할 수 있습니다.

따라서 내 질문 : 정확히 어떻게 다시 시작합니까 Boost.Log 후 fork()?

코드 예제가 많이 감사합니다.

+0

해결책을 찾았습니까? 감사. – marathon

+0

@ marathon, 불행히도, 아니, 나는하지 않았다. – maxschlepzig

답변

1

모든 싱크대를 처리하고 어린이 처리기 pthread_atfork 처리기 에서 재생성해야합니다. 나는. add_console_log 또는 add_file_log 함수는 boost::shared_ptr을 싱크대로 반환합니다. 다시 설정하고 초기화하십시오. fork 그냥 로그 싱크 깨진 것보다 더 뒤에 일을 떠날 수

... 
boost::shared_ptr< 
    sinks::synchronous_sink<sinks::text_ostream_backend> 
> console_sink = logging::add_console_log(); 
... 
void fork_child_handler(void) 
{ 
    console_sink = logging::add_console_log(); 
    return; 
} 

// in some global setup code of your application 
pthread_atfork(NULL /*prepare*/, 
       NULL /* parent */, 
       &fork_child_handler); 

관한주의 사항. 멀리에서 멀티 스레드 및 fork 모든 수단으로 (스레드가있는 경우 피하기 위해 싶습니다 포크에 대한 처리기를 제공하는 pthread 라이브러리, 일부는 아이러니 항상 의미 ...).

관련 문제