bko*_*cic 7 log4net log4net-configuration log4net-appender
我在某些时候有一连串的日志消息,所以我不得不BufferingForwardingAppender出于性能原因.但是,除了这种爆发(发生这种情况,一天一次),在剩下的一天中,我会收到少量的日志消息.问题是缓冲区大小设置为50,这对于突发时段是可以的,但对于没有突发的时段来说这太过分了.在此期间,刷新日志可能需要一两个多小时,这在此系统中是不可接受的.
有没有办法BufferingForwardingAppender在特定的时间间隔(例如每10分钟)进行刷新,如果缓冲区中没有足够的消息来触发通常的进程?
猜猜我有点迟到(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>
Run Code Online (Sandbox Code Playgroud)
在OP情况下,他将使用<interval value="600"/>每10分钟记录一次消息.
不是开箱即用的,但您可以基于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;
}
}
}
Run Code Online (Sandbox Code Playgroud)