7

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

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

4

2 回答 2

7

猜猜我有点晚了(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 分钟记录一次消息。

于 2017-02-08T19:35:28.057 回答
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;
        }
    }
}
于 2015-05-26T08:52:10.040 回答