c# - log4net - 仅在一天中的某些时间之间安排日志记录

标签 c# log4net

您能否将日志附加程序配置为仅在一天中的特定时间(例如每天 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 之间记录?

最佳答案

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

关于c# - log4net - 仅在一天中的某些时间之间安排日志记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44076005/

相关文章:

c# - 计时器线程是等到回调函数中的所有步骤都完成还是回调函数在每个周期都被重新调用

c# - 有没有办法禁止smtp透明转发?

logging - Kentor authservices 和 log4net

c# - 如果我想在运行 log4net 方法时运行 csc.exe,Internet Explorer 会提示我

c# - 我如何构建一个包含大量 IF 语句的程序(进程)

c# - asp.net中如何在Web窗体之间传递信息

c# - GetHashCode 返回不同的值

multithreading - log4net + 多线程 + 滚动文件追加器

elasticsearch - Log4net RemoteSyslogAppender 将 <14> 添加到所有消息

ASP.NET 日志记录 - log4net 或运行状况监控?