log4net - BufferingForwardingAppender - 刷新超时

bko*_*cic 7 log4net log4net-configuration log4net-appender

我在某些时候有一连串的日志消息,所以我不得不BufferingForwardingAppender出于性能原因.但是,除了这种爆发(发生这种情况,一天一次),在剩下的一天中,我会收到少量的日志消息.问题是缓冲区大小设置为50,这对于突发时段是可以的,但对于没有突发的时段来说这太过分了.在此期间,刷新日志可能需要一两个多小时,这在此系统中是不可接受的.

有没有办法BufferingForwardingAppender在特定的时间间隔(例如每10分钟)进行刷新,如果缓冲区中没有足够的消息来触发通常的进程?

And*_*tas 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>
Run Code Online (Sandbox Code Playgroud)

在OP情况下,他将使用<interval value="600"/>每10分钟记录一次消息.


Pet*_*ter 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;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)