class Flapjack::Logger

Constants

LEVELS
SEVERITY_LABELS
SYSLOG_LEVELS

Public Class Methods

new(name, config = {}) click to toggle source
# File lib/flapjack/logger.rb, line 42
def initialize(name, config = {})
  config ||= {}

  @name = name

  @formatter = proc do |severity, datetime, progname, msg|
    t = datetime.iso8601(6)
    "#{t} [#{severity}] :: #{@name} :: #{msg}\n"
  end

  output = if config[:file].nil? || config[:file].empty? ||
    !File.exists?(File.dirname(config[:file])) ||
    !File.writable?(File.dirname(config[:file])) ||
    (File.exists?(config[:file]) && !File.writable?(config[:file]))

    STDOUT
  else
    config[:file]
  end

  @logger = ::Logger.new(output)
  @logger.formatter = @formatter

  configure(config)
end
syslog_add(severity, message, name) click to toggle source
# File lib/flapjack/logger.rb, line 100
def self.syslog_add(severity, message, name)
  @lock ||= Monitor.new
  @lock.synchronize do
    level = SYSLOG_LEVELS[severity]
    t = Time.now.iso8601
    l = SEVERITY_LABELS[severity]
    begin
      Syslog.open('flapjack', (Syslog::Constants::LOG_PID | Syslog::Constants::LOG_CONS),
                               Syslog::Constants::LOG_USER)
      Syslog.mask = Syslog::LOG_UPTO(::Syslog::Constants::LOG_ERR)
      Syslog.log(level, "#{t} [#{l}] :: #{name} :: %s", message)
    ensure
      Syslog.close
    end
  end
end

Public Instance Methods

add(severity, message = nil, progname = nil) { || ... } click to toggle source
# File lib/flapjack/logger.rb, line 117
def add(severity, message = nil, progname = nil, &block)
  raise "Cannot log with a closed logger" if @logger.nil?
  @logger.add(severity, message, progname, &block)
  if severity >= @level
    progname ||= 'flapjack'
    if message.nil?
      if block_given?
        message = yield
      else
        message = progname
        progname = 'flapjack'
      end
    end
  end

  Flapjack::Logger.syslog_add(severity, message, @name) if @use_syslog
end
close() click to toggle source
# File lib/flapjack/logger.rb, line 94
def close
  raise "Already closed" if @logger.nil?
  @logger.close
  @logger = nil
end
configure(config) click to toggle source
# File lib/flapjack/logger.rb, line 68
def configure(config)
  raise "Cannot configure closed logger" if @logger.nil?

  level = config['level']

  # we'll let Logger spit the dummy on invalid level values -- but will
  # assume INFO if nothing is provided
  if level.nil? || level.empty?
    level = 'INFO'
  end

  err = nil

  @level = begin
    ::Logger.const_get(level.upcase)
  rescue NameError
    err = "Unknown Logger severity level '#{level.upcase}', using INFO..."
    ::Logger::INFO
  end

  @logger.error(err) if err

  @logger.level = @level
  @use_syslog = config.has_key?('syslog_errors') && config['syslog_errors']
end
respond_to?(sym) click to toggle source
# File lib/flapjack/logger.rb, line 141
def respond_to?(sym)
  (LEVELS + [:configure, :close, :add]).include?(sym)
end