여러 유틸리티 클래스 내에서 로깅을 채택하고자합니다. 지. DBI. Log :: Log4perl을 사용하여 가장 좋은 방법은 무엇입니까?유틸리티 클래스 내에서 로깅
DBI (예 : MyDBI
)를 서브 클래스 화하고 거기에서 몇 가지 메소드를 오버라이드하여 로깅하도록 할 수 있다고 생각합니다. 그러나 카테고리에는 문제가 있습니다. 당신이
Log::Log4perl->get_logger(ref $self || $self)
와 로거를 만들 경우 모든 로그 항목 MyDBI
에 속하고 그들을 필터링 어려울 것이다. 따라서 호출 모듈 (예 : MyModule
)에서 MyDBI
에 로거를 전달하는 것이 나을 것 같습니다. 따라서 카테고리는 의미 상 올바를 수 있습니다. 첫 번째 질문은 일반적으로 괜찮습니까? 내 말은, 그러한 접근에 숨겨진 암초가 있는가?
두 번째 질문은 로거를 MyDBI
으로 전달하는 방법입니다. 나는 전역 변수를 선언하는 아이디어를 가지고있다. 지. $MyDBI::logger
및 호출 메서드에서 설정 :
local $MyDBI::logger = Log::Log4perl->get_logger(ref $self || $self);
전역 변수에 대한 전통적인 싫어함이 있습니다. 더 나은 방법을 생각해 볼 수 있습니까?
편집 : 물론 최고의 코드는 코드가 아닙니다. 상속을 고려한 경우 caller
이면 충분합니다.
세 번째 질문은 계층 적으로 관련이없는 경우 Log :: Log4perl과 함께 MyDBI
과 MyModule
두 범주에 모두 로그인 할 수 있습니까?
실례지만, 첫 문장을 이해하지 못했습니다. "호출자", "log4perl과 독립적으로 모듈 실행"은 무엇을 의미합니까?좀 더 명확하게 해주시겠습니까? – codeholic
예. 테스트 클래스를 작성할 때 반드시 log4perl을 구현하지는 않을 모듈을 만들 수 있습니다. 인터페이스의 일부인 경우 로직을 많이 추가해야하지만 건너 뛸 수 있습니다. – weismat