您是否可以将日志追加器配置为仅在当天的某些时段(例如每天08:00到19:00)之间输出?超出这些小时数的记录活动将被忽略,并且不会被appender记录。
<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 :(得分:1)
您可以使用过滤器来执行此操作,最简单的可能是通过覆盖FilterSkeleton来编写自己的过滤器,并且如果时间超出记录范围,则从Decide方法返回Deny。如果要进行日志记录,请确保返回Neutral,这样您就可以在过滤器链中首先使用自定义过滤器,并在需要时仍然应用其他过滤器,返回Accept将始终记录并忽略其他过滤器。
有关如何将这些内容放在一起的一些代码和配置示例,请参阅this SO question。
答案 1 :(得分: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>