サーバーで作業していますが、log4cplusを使用してメッセージをログに記録できるようにしたいと考えています。ここまではそれほど複雑なことはありません。
ただし、fork()
接続要求を受信するたびに子プロセスを作成するために使用します。子プロセスがデータベース接続のfork()
独自のインスタンスを持っていることを確認することです。
さて、子供にもロガーを活用したいと思います。サーバーではうまく機能します(つまり、セットアップ時にコンソールとファイルにログ出力が表示されます)。しかし、その後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は私の環境では使用できません...