2014-02-24 1 views
1

로그 레코드를 쓰는 저장 프로 시저를 호출하는 appender가 있습니다. 이것은 다음과 같습니다 (간결하게하기 위해 다듬어 짐).로거에 의한 appender의 동작을 어떻게 바꿀 수 있습니까?

<log4net> 
    <root> 
    <level value="WARN" /> 
    <appender-ref ref="ElsAppender" /> 
    </root> 
    <appender name="LogAppender" type="LoggerAssembly.Appender, LoggerAssembly"> 
    <bufferSize value="1" /> 
    <reconnectonerror value="True" /> 
    <parameter> 
     <parameterName value="@EntryDate" /> 
     <dbType value="DateTime" /> 
     <layout type="log4net.Layout.RawTimeStampLayout" /> 
    </parameter> 
    <parameter> 
     <parameterName value="@message" /> 
     <dbType value="String" /> 
     <size value="40000" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message" /> 
     </layout> 
    </parameter> 
    </appender> 
</log4net> 

메시지 매개 변수의 크기 필드는 40,000으로 설정됩니다.

그러나 나는 메시지 길이가 훨씬 길어야 할 로거가 있습니다. 특정 로거에 대해이 설정을 어떻게 변경합니까? 나는이처럼 LogAppender 복제 및 크기 값을 변경 시도 :

<log4net> 
    <root> 
    <level value="WARN" /> 
    <appender-ref ref="LogAppender" /> 
    </root> 
    <logger name="SpecialLogger"> 
    <level value="INFO" /> 
    <appender-ref ref="SpecialLogAppender" /> 
    </logger> 
    <appender name="LogAppender" type="LoggerAssembly.Appender, LoggerAssembly"> 
    <bufferSize value="1" /> 
    <reconnectonerror value="True" /> 
    <parameter> 
     <parameterName value="@EntryDate" /> 
     <dbType value="DateTime" /> 
     <layout type="log4net.Layout.RawTimeStampLayout" /> 
    </parameter> 
    <parameter> 
     <parameterName value="@message" /> 
     <dbType value="String" /> 
     <size value="40000" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message" /> 
     </layout> 
    </parameter> 
    </appender> 
    <appender name="SpecialLogAppender" type="LoggerAssembly.Appender, LoggerAssembly"> 
    <bufferSize value="1" /> 
    <reconnectonerror value="True" /> 
    <parameter> 
     <parameterName value="@EntryDate" /> 
     <dbType value="DateTime" /> 
     <layout type="log4net.Layout.RawTimeStampLayout" /> 
    </parameter> 
    <parameter> 
     <parameterName value="@message" /> 
     <dbType value="String" /> 
     <size value="400000" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message" /> 
     </layout> 
    </parameter> 
    </appender> 
</log4net> 

을하지만 한 번 LogAppender에 의해 한번 SpecialLogAppender에 의해, 두 번 기록되는 SpecialLogger의 메시지가 발생합니다. 어떤 아이디어?

답변

1

당신은 당신의 특별한 로거 정의에 additivity="false"을 추가해야

<logger name="SpecialLogger" additivity="false"> 
    <level value="INFO" /> 
    <appender-ref ref="SpecialLogAppender" /> 
</logger> 
+1

additivity는이 속성에 대해 끔찍한 이름입니다. 나는 그것을 보지 못했다고 나쁘다고 생각하지 않는다. 감사! – cregbrad

1

당신은 당신의 log4net의 펜더 (들)에 적합한 <filter> 요소를 추가해야합니다. 그래서 당신의 특별한 펜더는 기본 펜더를 선행 할 필요가 http://logging.apache.org/log4net/release/sdk/log4net.Filter.html

  • http://logging.apache.org/log4net/release/sdk/index.html
  • Log4net의 펜더는 문서 순서에 체크 http://logging.apache.org/log4net/release/manual/configuration.html#filters

    • 참조하십시오. 그러면 다음과 같은 일이해야합니다.

      <appender name="SpecialAppender" type="log4net.Appender.FileAppender"> 
          <file value="log.txt" /> 
          <filter type="log4net.Filter.LoggerMatchFilter"> 
          <loggerToMatch value="your-logger-name-here"> 
          <acceptOnMatch="true" 
          </filter> 
          <layout type="log4net.Layout.SimpleLayout" /> 
      </appender> 
      <appender name="DefaultAppender" type="log4net.Appender.FileAppender"> 
          <file value="log.txt" /> 
          <filter type="log4net.Filter.LoggerMatchFilter"> 
          <loggerToMatch value="your-logger-name-here"> 
          <acceptOnMatch="false" 
          </filter> 
          <layout type="log4net.Layout.SimpleLayout" /> 
      </appender> 
      
  • +0

    2 개의 답을 옳게 표시하고 싶습니다. making3는 더 간단하고 나의 정확한 문제를 해결하지만 이러한 변경이 더 많이 발생하면 훨씬 더 유연 해집니다. 감사! – cregbrad

    관련 문제