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