パッケージの一部として Log4perl を使用して、特定の DBI 接続が何をしているかをキャプチャしています。私の現在の計画は、 を介して、接続ごとに新しいロガー オブジェクトを作成することですLog::Log4perl->get_logger($mysql_connect_id)
。これにより、さまざまな接続が互いに台無しにすることなく、異なるファイルまたは同じファイルに書き込むことができるようになります。
私の懸念は、接続が切断され、そのロガーが不要になったときに何が起こるかということです。Log4perl がこれらのロガーを無期限に保持するだけの場合、メモリ リークのレシピのように思えます。
ロガーが役に立たなくなったと確信した後、ロガーを取り除く最良の方法は何ですか? あるいは、逆に、これは問題でもありますか? Log4perl には、この種のリークを既に防止する何らかの組み込みの処理メカニズムがありますか?
編集: 質問のコメントで言及されていますが、おそらくここで言及する価値があります: Log::Log4perl::Logger には
DESTROY
有望と思われる方法があります。ただし、それは文書化されておらず、「文字列 eq で初期化されていない値を使用しています」という警告が大量にスローされるため、注意が必要です。ハックのように感じます。(しかし、それが最善/唯一の方法である場合、「特定のパッケージからの特定の警告をオフにするにはどうすればよいですか?」という質問になると思います)