특정 DBI 연결이 수행하는 작업을 캡처하기 위해 Log4perl을 패키지의 일부로 사용하고 있습니다. 현재 나의 계획은 Log::Log4perl->get_logger($mysql_connect_id)
을 통해 각 연결마다 새로운 로거 개체를 만드는 것입니다. 다양한 로깅을 사용하면 서로 다른 파일이나 같은 파일에 서로 연결하지 않고도 쓸 수 있습니다.Log4perl logger가 더 이상 필요하지 않을 때 처분
연결이 끊어지고 로거가 더 이상 필요하지 않을 때 무슨 일이 일어날 지 궁금합니다. Log4perl이 이러한 로거를 무기한으로 유지하는 경우 메모리 누수가 발생합니다.
더 이상 유용하지 않다고 생각되면 로거를 제거하는 가장 좋은 방법은 무엇입니까? 반대로 Log4perl에 이미 이런 종류의 누출을 막아주는 일종의 내장 처리 메커니즘이 있습니까?
편집 : Log : Log4perl :: Logger는 유망한 것으로 보이는
DESTROY
방법이 있습니다. 그러나 그것은 문서화되어 있지 않으며 "문자열 이퀄라이저에서 초기화되지 않은 값 사용"경고를 던져서 조심스럽게 만듭니다. 그것은 해킹처럼 느껴집니다. (즉, 그것을 할 수있는 최선의/유일한 방법 인 경우에, 나는 문제가 될 생각 "나는 특정 패키지에서 나오는 특정 경고를 해제하려면 어떻게합니까?")
[삭제] (http://perldoc.perl.org/perlobj.html#Destructors) 메소드는 수동으로 호출하면 안됩니다. 객체가 제거 될 때 perl이 호출자가 될 것이기 때문입니다 기억으로부터. 'DESTROY'를 직접 호출해도 메모리는 해제되지 않습니다. –
@ 이반 : 글쎄, 쓰레기. 완벽하게 잘 생긴 해킹을하기에 너무. 팁 고마워. – BlairHippo
로거 객체는 코드 참조의 작은 해시입니다.당신이 많은 것을 만들지 않는다면, 여분의 메모리는 프로그램에서 메모리에 저장하는 실제 데이터와 비교할 때 중요하지 않습니다. 그것에 대해 걱정하지 마십시오. – Schwern