# HG changeset patch # User Matthew Wild # Date 1603204469 -3600 # Node ID d6fb9f7afaa53db9be2334e80f29bc5083cb0d17 # Parent 816c2fa1ca842677bd3a0aea350e8824abc9fc46 mod_log_ringbuffer: Discard old data when buffer is full diff -r 816c2fa1ca84 -r d6fb9f7afaa5 mod_log_ringbuffer/mod_log_ringbuffer.lua --- a/mod_log_ringbuffer/mod_log_ringbuffer.lua Mon Oct 19 22:02:30 2020 +0200 +++ b/mod_log_ringbuffer/mod_log_ringbuffer.lua Tue Oct 20 15:34:29 2020 +0100 @@ -57,7 +57,8 @@ end local function ringbuffer_log_sink_maker(sink_config) - local buffer = rb.new(sink_config.size or 100*1024); + local buffer_size = sink_config.size or 100*1024; + local buffer = rb.new(buffer_size); local timestamps = sink_config.timestamps; @@ -78,7 +79,16 @@ end return function (name, level, message, ...) - buffer:write(format("%s%s\t%s\t%s\n", timestamps and os_date(timestamps) or "", name, level, format(message, ...))); + local line = format("%s%s\t%s\t%s\n", timestamps and os_date(timestamps) or "", name, level, format(message, ...)); + if not buffer:write(line) then + if #line > buffer_size then + buffer:discard(buffer_size); + buffer:write(line:sub(-buffer_size)); + else + buffer:discard(#line); + buffer:write(line); + end + end end; end