Sha256: b3be655e62cba5f3b4eb6fc59875b31d60cf0e88e08ef776bf92d46caf0838bc

Contents?: true

Size: 1.78 KB

Versions: 31

Compression:

Stored size: 1.78 KB

Contents

# -*- encoding: utf-8 -*-
module Bluepill
  class Logger
    LOG_METHODS = [:emerg, :alert, :crit, :err, :warning, :notice, :info, :debug]

    def initialize(options = {})
      @options  = options
      @logger   = options[:logger] || self.create_logger
      @prefix   = options[:prefix]
      @stdout   = options[:stdout]
      @prefixes = {}
    end

    LOG_METHODS.each do |method|
      eval <<-END
        def #{method}(msg, prefix = [])
          if @logger.is_a?(self.class)
            @logger.#{method}(msg, [@prefix] + prefix)
          else
            s_prefix = prefix.size > 0 ? "[\#{prefix.compact.join(':')}] " : ""
            if @stdout
              $stdout.puts("[#{method}]: \#{s_prefix}\#{msg}")
              $stdout.flush
            end
            @logger.#{method}("\#{s_prefix}\#{msg}")
          end
        end
      END
    end

    def prefix_with(prefix)
      @prefixes[prefix] ||= self.class.new(:logger => self, :prefix => prefix)
    end

    def reopen
      if @logger.is_a?(self.class)
        @logger.reopen
      else
        @logger = create_logger
      end
    end

    protected
    def create_logger
      if @options[:log_file]
        LoggerAdapter.new(@options[:log_file])
      else
        Syslog.close if Syslog.opened? # need to explictly close it before reopening it
        Syslog.open(@options[:identity] || 'bluepilld', Syslog::LOG_PID, Syslog::LOG_LOCAL6)
      end
    end

    class LoggerAdapter < ::Logger
      LOGGER_EQUIVALENTS =
        {:debug => :debug, :err => :error, :warning => :warn, :info => :info, :emerg => :fatal, :alert => :warn, :crit => :fatal, :notice => :info}

      LOG_METHODS.each do |method|
        next if method == LOGGER_EQUIVALENTS[method]
        alias_method method, LOGGER_EQUIVALENTS[method]
      end
    end
  end
end

Version data entries

31 entries across 31 versions & 5 rubygems

Version Path
bluepill-rwgps-0.0.63 lib/bluepill/logger.rb
bluepill-rwgps-0.0.62 lib/bluepill/logger.rb
bluepill-rwgps-0.0.61 lib/bluepill/logger.rb
cloud66-bluepill-0.0.64 lib/bluepill/logger.rb
bluepill-0.0.68 lib/bluepill/logger.rb
bluepill-0.0.67 lib/bluepill/logger.rb
bluepill-rwgps-0.0.60 lib/bluepill/logger.rb
bluepill-0.0.66 lib/bluepill/logger.rb
bluepill-0.0.65 lib/bluepill/logger.rb
bluepill-0.0.64 lib/bluepill/logger.rb
cloud66-bluepill-0.0.63 lib/bluepill/logger.rb
bluepill-0.0.63 lib/bluepill/logger.rb
cloud66-bluepill-0.0.62 lib/bluepill/logger.rb
bluepill-0.0.62 lib/bluepill/logger.rb
bluepill-0.0.61 lib/bluepill/logger.rb
skalar-bluepill-0.0.60.1 lib/bluepill/logger.rb
bluepill-0.0.60 lib/bluepill/logger.rb
bluepill-0.0.59 lib/bluepill/logger.rb
bluepill-0.0.58 lib/bluepill/logger.rb
bluepill-0.0.57 lib/bluepill/logger.rb