【问题标题】:log4net - scheduling logging only between certain hours of the daylog4net - 仅在一天中的特定时间安排日志记录
【发布时间】:2017-05-20 05:38:12
【问题描述】:

您能否将日志附加程序配置为仅在一天中的特定时间(例如每天 08:00 到 19:00 之间)输出?在这些时间之外的记录活动将被忽略,并且不会被附加程序记录。

<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 之间记录呢?

【问题讨论】:

    标签: c# log4net


    【解决方案1】:

    @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>
    

    【讨论】:

      【解决方案2】:

      您可以使用过滤器来执行此操作,最简单的方法可能是通过覆盖FilterSkeleton 并在一天中的时间超出日志记录范围时从 Decide 方法返回 Deny 来编写您自己的过滤器。如果应该进行日志记录,请确保返回 Neutral,这样您可以在过滤器链中首先使用自定义过滤器,如果需要,仍然在其后应用其他过滤器,返回 Accept 将始终记录并忽略其他过滤器。

      请参阅this SO question,了解一些代码和配置示例,了解如何将它们组合在一起。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-17
        • 1970-01-01
        • 1970-01-01
        • 2011-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-25
        相关资源
        最近更新 更多