我在服务器上工作,我希望能够使用 log4cplus 记录消息。到这里为止没什么太复杂的。
但是,我fork()
每次收到连接请求时都会创建一个子进程。这fork()
是为了确保子进程有自己的数据库连接实例。
现在我也想在孩子中使用 Logger。它在服务器中运行良好(即,我可以在控制台中看到日志输出,并在我设置它时看到文件。)但是在fork()
它看起来像丢失之后。
现在使用的有一个简化的概要:
log4cplus::PropertyConfigurator::doConfigure(filename);
log4cplus::Logger l(log4cplus::Logger::getInstance("snap"));
l.log(ll, "Server Started", f_file, f_line); // <<-- works great!
...
listen();
accept();
...
fork();
// if child:
log4cplus::Logger l(log4cplus::Logger::getInstance("snap"));
l.log(ll, msg, f_file, f_line); // <<-- does not work?!
我在想记录器可能会将文件锁定在服务器中,因此孩子们自己无法打开同一个文件。是这样吗?如果是这样,那么 log4cplus 不能在我的环境中使用...