class BufferingLogger::Buffer

Buffer is used to wrap the logger's logdev to accomplish buffering. For the purposes of the Logger class a LogDevice only needs to implement write and close. We add buffered as well.

Public Class Methods

new(logdev) click to toggle source
# File lib/buffering_logger/buffer.rb, line 6
def initialize(logdev)
  @logdev = logdev
  @mutex = Mutex.new
end

Public Instance Methods

buffered(transform: nil) { || ... } click to toggle source

buffers during the block and then flushes. returns the value of the block.

# File lib/buffering_logger/buffer.rb, line 13
def buffered(transform: nil)
  self.buffering = true
  yield
ensure
  self.buffering = false
  flush(transform: transform)
end
close() click to toggle source
# File lib/buffering_logger/buffer.rb, line 29
def close
  logdev_close
end
write(msg) click to toggle source
# File lib/buffering_logger/buffer.rb, line 21
def write(msg)
  if buffering
    buffer.write(msg)
  else
    logdev_write(msg)
  end
end

Private Instance Methods

buffer() click to toggle source
# File lib/buffering_logger/buffer.rb, line 57
def buffer
  Thread.current[buffer_id] ||= StringIO.new
end
buffer_id() click to toggle source
# File lib/buffering_logger/buffer.rb, line 61
def buffer_id
  "buffering_logger_#{object_id}_buffer"
end
buffering() click to toggle source
# File lib/buffering_logger/buffer.rb, line 65
def buffering
  Thread.current[buffering_id]
end
buffering=(val) click to toggle source
# File lib/buffering_logger/buffer.rb, line 69
def buffering=(val)
  Thread.current[buffering_id] = val
end
buffering_id() click to toggle source
# File lib/buffering_logger/buffer.rb, line 73
def buffering_id
  "buffering_logger_#{object_id}_is_buffering"
end
flush(transform: nil) click to toggle source
# File lib/buffering_logger/buffer.rb, line 35
def flush(transform: nil)
  if buffer && buffer.length > 0
    msg = buffer.string
    msg = transform.call(msg) if transform
    logdev_write(msg)
  end
ensure
  buffer.reopen('')
end
logdev_close() click to toggle source
# File lib/buffering_logger/buffer.rb, line 51
def logdev_close
  @mutex.synchronize do
    @logdev.close
  end
end
logdev_write(msg) click to toggle source
# File lib/buffering_logger/buffer.rb, line 45
def logdev_write(msg)
  @mutex.synchronize do
    @logdev.write(msg)
  end
end