Я использую Log4perl как часть пакета для захвата того, что делает конкретное соединение DBI. Мой текущий план состоит в том, чтобы создать новый объект регистратора для каждого соединения через Log::Log4perl->get_logger($mysql_connect_id)
, что должно позволить различным соединениям записывать либо в разные файлы, либо в один и тот же файл, не нарушая друг друга.
Меня беспокоит то, что происходит, когда соединение разрывается и этот регистратор больше не нужен. Если Log4perl просто держит эти регистраторы неопределенно долго, это звучит как рецепт утечки памяти.
Как лучше всего избавиться от регистратора, если я уверен, что он больше не нужен? Или, наоборот, это вообще проблема — есть ли в Log4perl какой-то встроенный механизм удаления, который уже предотвращает подобную утечку?
Редактировать: Упоминается в комментариях к вопросу, вероятно, стоит упомянуть здесь: Log::Log4perl::Logger имеет метод
DESTROY
, который кажется многообещающим. Однако он недокументирован и выдает кучу предупреждений «Использование неинициализированного значения в строковом эквалайзере», что заставляет меня насторожиться; это похоже на взлом. (Но если это лучший/единственный способ сделать это, я полагаю, что возникает вопрос: «Как отключить конкретное предупреждение, поступающее от определенного пакета?»)
DESTROY
не следует вызывать вручную, потому что он будет вызываться самим perl, когда объект будет удален из памяти. Прямой вызовDESTROY
не освободит память. - person Ivan Nevostruev   schedule 06.05.2011