2009-02-09 3 views
0

다중 계층 응용 프로그램에서 log4net을 설정하고 있습니다. 대부분의 로깅을 원하는대로 설정했지만 현재는 출력 할 레벨에 최대한의 유연성을 허용하도록 .config에서 <logger> 항목을 설정하려고합니다.log4net 중첩 로거 .config 예

내 로거 명명 규칙과 같이 진행됩니다..

<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="MyAppender" /> 
</root> 

<logger name = "ExecutableName"> 
    <level value="FATAL" /> 
</logger> 

<logger name = "ExecutableName.WorkerThreadName"> 
    <level value="OFF" />  
</logger> 

<logger name = "ExecutableName.WorkerThreadName.ClassName"> 
    <level value="INFO" />   
</logger> 
<!--repeat as necessary---> 
:
ExecutableName.WorkerThreadName을 [ExternalModuleName (들)] 클래스 이름은

.config 파일에서 나의 현재 로거 정의 섹션과 같이 보입니다

바라건대 당신은 아이디어를 얻습니다. 이것은 (특히 앱이 지원 단계에 이르렀을 때) 엔트리를 유지하기가 어렵다는 혼란으로 폭발 할 가능성이있는 것 같습니다.
중첩 된 로거에 대한 레벨 정의를 가장 잘 관리하는 방법에 대한 제안 사항이 있습니까?
xml 문을 실제로 중첩시키면서 약간 놀았지만 작동하지 않습니다.

답변

2

일반적으로 나는 적어도 모든 경고와 심각한 수준의 메시지를 받고 싶다. 로거는 계층 구조의 상위에있는 로거와 궁극적으로 루트 로거에서 수준을 상속하므로 상위 수준 로거에만 수준을 할당합니다. 귀하의 경우에는 "ExecutableName"로거가됩니다.

예를 들어있는 특별 로거의 경우 치명적인 메시지 이외의 다른 메시지에 관심이 없으면 특정 레벨 설정을 추가 할 것입니다. 그러나 이것은 일반적으로 일반적인 경우가 아니므로 관리가 가능한 크기입니다.

WARN 또는 INFO를 최상위 수준의 로거에서 사용한 다음 다양한 수준의 필터가있는 애펜더를 사용하십시오. 결과적으로 방대한 양의 메시지가 레벨에 따라 다른 저장소로 그룹화됩니다. 최상위 레벨 로거 각각에 대해 별도의 애펜더를 사용하여 메시지 스트림을보다 세밀하게 제어 할 수도 있습니다.