2012-11-14 2 views
2

Logger을 추가 한 후에 제거 할 수 있습니까? 다음과 같이 말하십시오 :로거를 프로그래밍 방식으로 제거 할 수있는 기능

LogManager.GetLogger("loggerName") 

제 연구에서는 불가능한 것처럼 보입니다. 내가 찾은 가장 가까운 것은 Clearhierarchy method으로 전화하는 기능입니다. 이것은 실제로 기존의 로거를 지우지 만 선택적으로 제거하려고합니다. 가장 안전한 방법은 아닙니다.

일부 배경에서는 응용 프로그램 수명 당 수천 개의 동시 작업과 수십만 개의 작업이있을 수있는 작업 당 하나의 파일을 로깅합니다. 한 가지 방법은 각 작업에 대해 Logger을 만든 다음 작업이 완료되면 제거하는 것입니다. 그러나 Logger을 선택적으로 제거 할 수있는 기능이 없으면 은퇴 한 인스턴스가 메모리를 낭비하게됩니다.

물론 대안 디자인이 있습니다. 문제는 주어진 Logger에 필요에 따라 AppendersFilters을 추가/제거하여 해결할 수 있습니다. 또한 LoggersAppenders 풀을 생성 한 다음 작업별로 구성 할 수 있습니다.

특정 로거가 추가되면 제거 할 수있는 방법이 없다는 것은 명백히 쇼 스토퍼가 아닙니다. 내가 놓친 것일 수도있는 Logger을 삭제할 수있는 방법이 있다면 궁금합니다.

답변

0

장시간 개봉했기 때문에 마무리되었습니다. 나는 로거를 제거하는 방법을 찾지 못했고 문서에서 본 것이 아무것도 없다. 최대의 동시 작업으로 만 확장 될 수있는 로거 풀을 공유하는 솔루션입니다. 각 작업은 특정 작업에 추가 된 appender를 사용하여 풀에서 로거를 가져올 수 있습니다. 타스크 완료시, appender가 제거되고 로거가 풀로 리턴됩니다.

1

아니요, 불가능합니다. 이것은 최근에 FAQ에 구체적으로 언급되어 있습니다.

로거 인스턴스는 생성 전용 인 것 같습니다. 로거 인스턴스를 제거하는 방법이없는 이유는 무엇입니까? 여전히 사용자가 참조하는 "제거 된"로거의 의미를 정의하는 것은 중요하지 않습니다.

출처 : Ability to programmatically remove a Logger

관련 문제