log4net : 특정 클래스의 메시지를 무시하도록 구성
log4net 구성이 특정 클래스를 무시하도록하는 방법이 있습니까? 예를 들어, 우리는 일반적으로 모든 수업에서 로그를 생성합니다. 이와 유사 :
private static readonly ILog Log = log4net.LogManager.GetLogger("MyClass");
문제는 MyClass
엄청난 양의 데이터를 기록하고 다른 클래스에 대한 정보를 찾기가 어렵다는 것입니다. 사용하는 다른 개발자 MyClass
이므로 로그 파일에 들어가서 변경할 수는 없지만 내 환경에서는 무시하고 싶습니다.
configuration
특정 클래스의 메시지를 무시하도록 파일을 설정할 수 있습니까 ?
다음은 향후 참조를 위해 블로그에 게시 된 스 니펫입니다. 모든 크레딧은 해당 블로그 게시물의 작성자에게 있습니다.
<filter type="log4net.Filter.LoggerMatchFilter">
<!-- allows this sub-namespace to be logged... -->
<loggerToMatch value="Noisy.Namespace.But.Important" />
</filter>
<filter type="log4net.Filter.LoggerMatchFilter">
<!-- ...but not the rest of it -->
<loggerToMatch value="Noisy.Namespace" />
<acceptOnMatch value="false" />
</filter>
필터는 확실히 작동하지만 다음과 같이 로거 (또는 로거 계층 구조)를 직접 끄는 것이 좋습니다.
<logger name="YourNameSpace.WithNoLogging" additivity="false">
<level value="OFF" />
</logger>
<logger name="MyClass" additivity="false">
<level value="OFF" />
</logger>
<root>
<level value="ALL" />
<appender-ref ref="YourAppender" />
</root>
YourNameSpace.WithNoLogging
이것이 네임 스페이스 라고 가정하면 표시된 구성은 전체 네임 스페이스에 대한 로깅을 비활성화합니다. 두 번째 "예제"는 질문에 따라 수업에 대한 로깅을 해제합니다.
필터 도 사용하는 것이 좋습니다 . 그러나 필터를 구현하려고 할 때 전체 그림을 찾는 데 어려움을 겪었 기 때문에 Configutation file
필터가 어디로 가는지 알려주 는 내가 만든 샘플 스 니펫을 게시하고 있습니다.
이 경우에 사용하는 필터는
log4net.Filter.LoggerMatchFilter ---- (로거 이름의 시작 부분과 일치합니다.)
힌트 에 config
대한 파일 Log4Net 당신이 당신의 태그를 넣어 그 중 우선 순위가 실제로 중요한 곳은 중요합니다. 따라서이 경우 <filter>
태그는 <appender>
여는 태그 뒤 와 태그 앞에옵니다 <file value = ... />
.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="RollingFile.PassedDevices" type="log4net.Appender.RollingFileAppender">
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="Foo.namespace.bar.mySubclass" />
<acceptOnMatch value="false" />
</filter>
<file value="myPassedDevices.log" />
<appendToFile value="true" />
<maximumFileSize value="100KB" />
<maxSizeRollBackups value="2" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%timestamp %level - %message [%thread] %logger%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFile" /> <!-- My other appender which logs all and I cut it out in this snippet. Remember that you should reference all your appenders in this tag to make them work.-->
<appender-ref ref="RollingFile.PassedDevices" />
</root>
</log4net>
</configuration>
이 기술에서는 appenders
특정 로거의 로깅 결과 appender
를 무시하는 대신 개별로 리디렉션 할 수있는 다중 을 가질 수 있습니다. appender
모든 로그에 대한 하나 와 특정 class
.
자신의 메시지에 범주를 적용 할 수 있습니다.이 글타래를 시도해보십시오 : log4net 메시지에 범주 접두사를 추가하는 방법?
'Program Tip' 카테고리의 다른 글
Javascript에서 현재 디렉토리 이름을 어떻게 얻을 수 있습니까? (0) | 2020.11.23 |
---|---|
ArrayList : 크기는 어떻게 증가합니까? (0) | 2020.11.23 |
iOS 보이스 오버 상태 (0) | 2020.11.23 |
컬러 맵을 사용하여 matplotlib에서 선 색상 설정 (0) | 2020.11.23 |
Gunicorn에서 실행되는 Flask 앱 디버깅 (0) | 2020.11.23 |