8
Boost.Log does not support fork()。这是令人难以置信的,但一个ticket comment描述了一个解决方法:如何在叉上重新初始化Boost日志库?
[..]所以现在是由用户重新初始化叉库。你可以使用pthread_atfork来做这种重新初始化。
因此我的问题:如何在fork()之后重新初始化Boost.Log?
代码示例非常感谢。
Boost.Log does not support fork()。这是令人难以置信的,但一个ticket comment描述了一个解决方法:如何在叉上重新初始化Boost日志库?
[..]所以现在是由用户重新初始化叉库。你可以使用pthread_atfork来做这种重新初始化。
因此我的问题:如何在fork()之后重新初始化Boost.Log?
代码示例非常感谢。
您必须照顾所有接收器,并在处理器中在子进程 process_中重新创建它们。即add_console_log
或add_file_log
函数会将boost::shared_ptr
返回到接收器。重置它,并再次初始化 。
...
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
可能留下的不仅仅是打破 日志水槽更多的事情。远离多线程和fork
通过所有的手段 (它的一些讽刺,pthread库提供了处理程序叉, ,你想避免,如果有线程...)。
您是否找到了解决方案?谢谢。 – marathon
@马拉松,不幸的是,我没有。 – maxschlepzig