class BufferingLogger::Logger

Buffering happens within a buffered block, like:

logger.buffered { logger.info 'hi'; logger.info 'goodbye' }

Buffering is implemented by wrapping the logger @logdev object with a Buffer.

Attributes

default_transform[RW]
raw_log_device[R]

Public Class Methods

new(logdev, shift_age: 0, shift_size: 1048576) click to toggle source
Calls superclass method
# File lib/buffering_logger/logger.rb, line 13
def initialize(logdev, shift_age: 0, shift_size: 1048576)
  @shift_age, @shift_size = shift_age, shift_size
  @opened_logdev = false
  super(nil, shift_age, shift_size)
  self.logdev = logdev
end

Public Instance Methods

buffered(transform: default_transform) { || ... } click to toggle source
# File lib/buffering_logger/logger.rb, line 37
def buffered(transform: default_transform)
  @logdev.buffered(transform: transform) do
    yield
  end
end
logdev=(logdev) click to toggle source

allow changing the log destination. e.g.: in Unicorn during after_fork to set a separate log path for each worker.

# File lib/buffering_logger/logger.rb, line 22
def logdev=(logdev)
  @logdev.close if @logdev && @opened_logdev

  @raw_log_device = LogDevice.new(
    logdev,
    shift_age: @shift_age,
    shift_size: @shift_size,
  )

  # if we opened the logdev then we should close it when we're done
  @opened_logdev = @raw_log_device.dev != logdev

  @logdev = BufferingLogger::Buffer.new(@raw_log_device)
end