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