class Sqreen::DeferredLogger

Constants

Entry
MAX_ENTRIES

Public Class Methods

new() click to toggle source
# File lib/sqreen/deferred_logger.rb, line 16
def initialize
  @buffer = StringIO.new
  @logger = ::Logger.new(@buffer)
  @entries = []
  @mutex = Mutex.new
end

Public Instance Methods

add(severity, msg = nil, &block) click to toggle source
# File lib/sqreen/deferred_logger.rb, line 67
def add(severity, msg = nil, &block)
  @mutex.synchronize do
    @entries.shift if @entries.count >= MAX_ENTRIES
    mark = @buffer.pos
    @logger.add(severity, msg, &block)
    @buffer.seek(mark)
    @entries << Entry.new(severity, @buffer.read)
    @buffer.truncate(0)
  end
end
debug(msg = nil, &block) click to toggle source
# File lib/sqreen/deferred_logger.rb, line 43
def debug(msg = nil, &block)
  add(::Logger::DEBUG, msg, &block)
end
debug?() click to toggle source
# File lib/sqreen/deferred_logger.rb, line 23
def debug?
  true
end
error(msg = nil, &block) click to toggle source
# File lib/sqreen/deferred_logger.rb, line 55
def error(msg = nil, &block)
  add(::Logger::ERROR, msg, &block)
end
error?() click to toggle source
# File lib/sqreen/deferred_logger.rb, line 35
def error?
  true
end
fatal(msg = nil, &block) click to toggle source
# File lib/sqreen/deferred_logger.rb, line 59
def fatal(msg = nil, &block)
  add(::Logger::FATAL, msg, &block)
end
fatal?() click to toggle source
# File lib/sqreen/deferred_logger.rb, line 39
def fatal?
  true
end
flush_to(logger) click to toggle source
# File lib/sqreen/deferred_logger.rb, line 82
def flush_to(logger)
  @mutex.synchronize do
    @entries.each do |entry|
      next if entry.severity < logger.level
      logger.instance_eval { @logdev }.write(entry.message)
    end
    reset
  end
end
formatter=(value) click to toggle source
# File lib/sqreen/deferred_logger.rb, line 78
def formatter=(value)
  @logger.formatter = value
end
info(msg = nil, &block) click to toggle source
# File lib/sqreen/deferred_logger.rb, line 47
def info(msg = nil, &block)
  add(::Logger::INFO, msg, &block)
end
info?() click to toggle source
# File lib/sqreen/deferred_logger.rb, line 27
def info?
  true
end
unknown(msg = nil, &block) click to toggle source
# File lib/sqreen/deferred_logger.rb, line 63
def unknown(msg = nil, &block)
  add(::Logger::UNKNOWN, msg, &block)
end
warn(msg = nil, &block) click to toggle source
# File lib/sqreen/deferred_logger.rb, line 51
def warn(msg = nil, &block)
  add(::Logger::WARN, msg, &block)
end
warn?() click to toggle source
# File lib/sqreen/deferred_logger.rb, line 31
def warn?
  true
end

Private Instance Methods

reset() click to toggle source
# File lib/sqreen/deferred_logger.rb, line 94
def reset
  buffer = StringIO.new
  logger = ::Logger.new(buffer)
  logger.formatter = @logger.formatter
  @buffer, @logger, @entries = buffer, logger, []
end