我使用Log4perl作爲包的一部分來捕獲特定的DBI連接正在做什麼。我目前的計劃是通過Log::Log4perl->get_logger($mysql_connect_id)
爲每個連接創建一個新的記錄器對象,這將允許各種連接寫入不同的文件或相同的文件,而不會互相搞砸。處理Log4perl記錄器時,我不再需要它
我擔心的是當連接斷開並且不再需要記錄器時發生的情況。如果Log4perl只是讓這些記錄器無限期地存在,那聽起來就像是內存泄漏的祕訣。
在我確定它不再有用之後擺脫記錄器的最佳方式是什麼?或者相反,這甚至是一個問題 - Log4perl是否具有某種內置的處理機制,可以防止這種泄漏?
編輯:在一個問題的評論中提到,可能值得一提的是:Log :: Log4perl :: Logger有一個
DESTROY
方法,看起來很有前途。然而,它沒有記錄,並引發了一堆「在字符串eq中使用未初始化值」的警告,這讓我很擔心;它感覺像一個黑客。 (但如果是做的最好的/唯一的辦法,我想問題就變成了「我如何關閉特定的警告,從一個特定的軟件包來嗎?」)
['DESTROY'](http://perldoc.perl.org/perlobj.html#Destructors)方法不應該手動調用,因爲當對象將要被移除時,它將被perl本身調用從記憶裏。直接調用DESTROY不會釋放內存。 – 2011-05-06 17:09:05
@伊萬:好的,廢話。非常好看的黑客太多了。謝謝你的提示。 – BlairHippo 2011-05-06 17:14:49
記錄器對象是代碼引用的小散列。除非你在製作大量的東西,否則我認爲與程序在內存中存儲的任何實際數據相比,額外的內存是無關緊要的。不要擔心。 – Schwern 2011-05-09 06:38:06