class Librato::Rack::Logger

Wraps an available logger object and provides convenience methods for logging using a separate set of log levels

Constants

LOG_LEVELS

Attributes

outlet[R]
prefix[RW]

Public Class Methods

new(outlet=nil) click to toggle source
# File lib/librato/rack/logger.rb, line 14
def initialize(outlet=nil)
  @buffer = []
  self.outlet = outlet
  self.prefix = ''
end

Public Instance Methods

log(level, message=nil, &block) click to toggle source

@example Simple logging

log :debug, 'this is a debug message'

@example Block logging - not executed if won't be logged

log(:debug) { "found #{thingy} at #{place}" }
# File lib/librato/rack/logger.rb, line 26
def log(level, message=nil, &block)
  return unless should_log?(level)
  message = prefix + (message || block.call)
  if outlet.nil?
    buffer(level, message)
  else
    write_to_outlet(level, message)
  end
end
log_level() click to toggle source
# File lib/librato/rack/logger.rb, line 47
def log_level
  @log_level ||= :info
end
log_level=(level) click to toggle source

set log level to any of LOG_LEVELS

# File lib/librato/rack/logger.rb, line 37
def log_level=(level)
  level = level.to_sym
  if LOG_LEVELS.index(level)
    @log_level = level
    require 'pp' if should_log?(:debug)
  else
    raise InvalidLogLevel, "Invalid log level '#{level}'"
  end
end
outlet=(outlet) click to toggle source
# File lib/librato/rack/logger.rb, line 51
def outlet=(outlet)
  @outlet = outlet
  flush_buffer unless (outlet.nil? || @buffer.empty?)
end

Private Instance Methods

buffer(level, message) click to toggle source
# File lib/librato/rack/logger.rb, line 58
def buffer(level, message)
  @buffer << [level, message]
end
flush_buffer() click to toggle source
# File lib/librato/rack/logger.rb, line 62
def flush_buffer
  @buffer.each { |buffered| write_to_outlet(*buffered) }
end
log_to_logger(level, message) click to toggle source

write message to an ruby stdlib logger object or another class with similar interface, respecting log levels when we can map them

# File lib/librato/rack/logger.rb, line 68
def log_to_logger(level, message)
  case level
  when :error, :warn
    method = level
  else
    method = :info
  end
  outlet.send(method, message)
end
should_log?(level) click to toggle source
# File lib/librato/rack/logger.rb, line 78
def should_log?(level)
  LOG_LEVELS.index(self.log_level) >= LOG_LEVELS.index(level)
end
write_to_outlet(level, message) click to toggle source
# File lib/librato/rack/logger.rb, line 82
def write_to_outlet(level, message)
  if outlet.respond_to?(:puts) # io obj
    outlet.puts(message)
  elsif outlet.respond_to?(:error) # logger obj
    log_to_logger(level, message)
  else
    raise "invalid outlet: not a Logger or IO object"
  end
end