2017-05-19 3 views
1

ログアペンダーは、毎日08:00〜19:00のような特定の時間帯に出力するように設定できますか?その時間外のロギング活動は無視され、アペンダーによって記録されません。log4net - 1日の特定の時間にのみロギングをスケジュールする

<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時00分の間にのみログにこれを設定することができますか?

答えて

0

@Mattに記載されているフィルタは、これを行うためのより一般的な方法です。 しかし、ファイルにログオンしたいだけなら、RollingFileAppenderから派生したカスタムアペンダーを作成できます。構成の

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メソッドからDenyを返すことによって、自分自身で作成することでしょう。ロギングを行う必要がある場合は、フィルタチェーン内でカスタムフィルタを最初に使用し、必要に応じて他のフィルタを適用して、Acceptを返すと他のフィルタは常にログに記録され、無視されます。

いくつかのコードについてはthis SO questionを参照してください。また、これをどのように組み合わせるかについての設定例もあります。

関連する問題