Program Tip

log4net : 특정 클래스의 메시지를 무시하도록 구성

programtip 2020. 11. 23. 19:56
반응형

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 메시지에 범주 접두사를 추가하는 방법?

참고 URL : https://stackoverflow.com/questions/5504148/log4net-configure-to-ignore-messages-from-a-specific-class

반응형