2017-05-19 6 views
1

매일 로그 아웃 시간을 08:00에서 19:00 사이와 같이 특정 시간 사이에 출력하도록 구성 할 수 있습니까? 해당 시간 이외의 로깅 활동은 무시되며 appender가 로깅하지 않습니다.log4net - 하루 중 특정 시간 사이에만 로깅 예약

<log4net> 
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value=".output.log"/> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 
    <appendToFile value="true"/> 
    <rollingStyle value="Date"/> 
    <datePattern value="yyyyMMdd"/> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%d [%t] %-5p %m%n"/> 
    </layout> 
</appender> 
<root> 
    <level value="DEBUG"/> 
    <appender-ref ref="RollingLogFileAppender"/> 
</root> 

따라서 위, 어떻게이 낮 08:00 19시 사이에 로그에만 구성 할 수 있습니다?

답변

0

@Matt에서 언급 한 필터는이 작업을 수행하는 일반적인 방법 중 하나입니다. 그러나 파일에 로그인 만하려는 경우 RollingFileAppender에서 파생 된 사용자 정의 appender를 만들 수 있습니다.

namespace YourNameSpace 
{ 
    public class TimeBoundedRollingFileAppender : RollingFileAppender 
    { 
     public int LogFrom { get; set; } 
     public int LogTo { get; set; } 

     protected override bool FilterEvent(LoggingEvent loggingEvent) 
     { 
      var currentHour = DateTime.Now.Hour; 
      if (currentHour <= LogFrom || currentHour >= LogTo) 
      { 
       return false; 
      } 

      return base.FilterEvent(loggingEvent); 
     } 
    } 
} 

그리고 구성 : 과 같이

<log4net> 
    <appender name="TimeBoundedAppender" type="YourNameSpace.TimeBoundedRollingFileAppender, YourNameSpace"> 
    <file value=".output.log"/> 
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> 
    <appendToFile value="true"/> 
    <rollingStyle value="Date"/> 
    <datePattern value="yyyyMMdd"/> 
    <LogFrom>8</LogFrom> 
    <LogTo>19</LogTo> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d [%t] %-5p %m%n"/> 
    </layout> 
    </appender> 
    <root> 
     <level value="DEBUG"/> 
     <appender-ref ref="TimeBoundedAppender"/> 
    </root> 
</log4net> 
1

필터를 사용하면 가장 간단한 방법은 시간이 로깅 범위를 벗어난 경우 FilterSkeleton을 무시하고 Decide 메서드에서 거부를 반환하여 사용자가 직접 작성하는 것입니다. 로깅을 수행해야한다면 중립을 반환해야합니다. 이렇게하면 필터 체인에서 먼저 사용자 지정 필터를 사용할 수 있으며 필요하다면 다른 필터를 적용 할 수 있습니다. Accept를 반환하면 항상 다른 필터가 기록되고 무시됩니다.

일부 코드의 경우 this SO question을 참조하고 함께 사용하는 방법에 대한 설정 예제를 참조하십시오.