Sha256: 957f788a239df769983bace5008f40051735325553bde9d42dad9a21def1655b

Contents?: true

Size: 1.33 KB

Versions: 3

Compression:

Stored size: 1.33 KB

Contents

require 'logger'
require 'singleton'

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

  #
  # Logger
  #
  class Logger
    include Singleton

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

    def log(level, message)
      raise StandardError, 'SoraGeocoding tried to log a message with an invalid log level.' unless valid_level?(level)

      if respond_to?(:add)
        add(LOG_LEVEL[level], message)
      else
        raise SoraGeocoding::ConfigurationError, 'Please specify valid logger for SoraGeocoding. ' \
                                                 'Logger specified must respond to `add(level, message)`.'
      end
      nil
    end

    def add(level, message)
      return unless log_message_at_level?(level)

      case level
      when ::Logger::DEBUG, ::Logger::INFO
        puts message
      when ::Logger::WARN
        warn message
      when ::Logger::ERROR
        raise message
      when ::Logger::FATAL
        raise message
      end
    end

    private
      def valid_level?(level)
        LOG_LEVEL.keys.include?(level)
      end

      def log_message_at_level?(level)
        level >= SoraGeocoding.config.logger_level
      end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
sora_geocoding-0.2.2 lib/sora_geocoding/logger.rb
sora_geocoding-0.2.0 lib/sora_geocoding/logger.rb
sora_geocoding-0.1.0 lib/sora_geocoding/logger.rb