It looks like there is a race condition between the settings for the 2 properties: log.default.flush.scheduler.interval.ms & log.default.flush.interval.ms. I'm using 0.7.2.
By default, both of these get set to 3000ms (and in the docs, it recommends setting flushInterval to be a multiple of the flushSchedulerInterval). However, the code in LogManager.flushAllLogs (which is scheduled to run at a fixed rate using the flushSchedulerInterval property) looks like this: val timeSinceLastFlush = System.currentTimeMillis - log.getLastFlushedTime var logFlushInterval = config.defaultFlushIntervalMs .... .... if(timeSinceLastFlush >= logFlushInterval) log.flush So, it will only flush logs if the the time since the last flush is longer than the flush interval. But, the log.lastFlushedTime is not set until after flushing is completed (which can incur some io time). Thus, by enabling TRACE logging for this method, I was able to see that with the defaults, timeSinceLastFlush was usually about 2998 (which is less than the logFlushInterval of 3000). Thus, setting a flushInterval the same as the scheduler.flushInterval essentially devolves to an effective flushInterval = 2X the schedulerFlushInterval. So, setting a flushIinterval slightly less than the flushSchedulerInterval (e.g. 2500) will guarantee that the flush will happen on each scheduler invocation. I'm guessing that it might make sense to change the logic gating the flush to something like: if(timeSinceLastFlush >= 0.90 * logFlushInterval) might be reasonable. Also, the scheduler probably ought to use a 'fixedDelay' rather than a 'fixedRate' schedule..... Jason