我在某些时候有一连串的日志消息,所以出于性能原因我不得不放BufferingForwardingAppender
。但是,除了这种爆发(发生这种情况,一天一次),在剩下的一天中,我会收到少量的日志消息。
问题是缓冲区大小设置为50,这对于突发时段是可以的,但对于没有突发的时段来说这太过分了。在此期间,刷新日志可能需要一两个多小时,这在此系统中是不可接受的。
如果没有足够的消息在缓冲区中触发通常的过程,是否有某种方法可以在特定的时间间隔(例如,每10分钟)使BufferingForwardingAppender
刷新一次?
答案 0 :(得分:5)
猜猜我有点迟到(3年),但经过相当多的搜索,我发现了一些可能有助于其他人解决这个问题的东西。这对我有用:
<appender name="MyBufferingForwardingAppender" type="log4net.Appender.BufferingForwardingAppender">
<bufferSize value="1000" /> <!-- flush after 1000 log events -->
<appender-ref ref="MyRollingFileAppender" />
<lossy value="false" /> <!-- do not lose any logs -->
<evaluator type="log4net.Core.TimeEvaluator">
<interval value="2"/> <!-- flush every two seconds -->
</evaluator>
</appender>
在OP情况下,他会使用<interval value="600"/>
每10分钟记录一次消息。
答案 1 :(得分:1)
不是开箱即用,但您可以根据BufferingForwardingAppender创建自己的追加者:
private static DateTime lastFlushTime = DateTime.Now;
public class TimedBufferingForwardingAppender : BufferingForwardingAppender{
override protected void Append(LoggingEvent loggingEvent) {
if (lastFlushTime.AddMinutes(10) < DateTime.Now){
SendBuffer(new LoggingEvent[] { loggingEvent } );
lastFlushTime = DateTime.Now;
}
}
}