0
我正在使用服務器,我希望能夠使用log4cplus記錄消息。到這裏一點也不復雜。fork()後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不能在我的環境中使用...
在創建一個新的記錄器實例之前關閉該記錄器實例。 –
這是用shutdown()調用完成的嗎? –
好的!這工作。 shutdown()+ reconfigure和getInstance()。 –