lib/geocoder/logger.rb



require 'logger'

module Geocoder

  def self.log(level, message)
    Logger.instance.log(level, message)
  end

  class Logger
    include Singleton

    SEVERITY = {
      debug: ::Logger::DEBUG,
      info: ::Logger::INFO,
      warn: ::Logger::WARN,
      error: ::Logger::ERROR,
      fatal: ::Logger::FATAL
    }

    def log(level, message)
      return nil unless valid_level?(level)

      logger = Geocoder.config[:logger]

      if logger == :kernel
        kernel_log(level, message)
      elsif logger.kind_of? ::Logger
        logger.add(SEVERITY[level], message)
      else
        raise Geocoder::ConfigurationError, "Please specify valid logger for Geocoder. " +
        "Logger specified must be :kernel or must respond to `add(level, message)`."
      end
      nil
    end

    private

    def kernel_log(level, message)
      case level
      when :debug, :info
        puts message
      when :warn
        warn message
      when :error
        raise message
      when :fatal
        fail message
      end
    end

    def valid_level?(level)
      [:debug, :info, :warn, :error, :fatal].include? level
    end
  end
end