Sha256: 5e1896cac62484bfbc0a4bd9bfbb52906a9f912b713100747090d64c51b9c558

Contents?: true

Size: 1.57 KB

Versions: 4

Compression:

Stored size: 1.57 KB

Contents

require 'logger'

module Protobuf
  class Logger < ::Logger
    
    class << self
      attr_accessor :file, :level

      # Stub out the log methods for Protobuf::Logger as singleton methods
      [:debug, :info, :warn, :error, :fatal, :any, :add, :log].each do |m|
        define_method(m) do |*params, &block|
          instance && instance.__send__(m, *params, &block)
        end
      end
    end
       
    # One-line file/level configuration
    def self.configure(options)
      self.file = options.fetch(:file, false)
      self.level = options.fetch(:level, false)
    end
    
    # Use to reset the instance
    def self.reset_device!
      self.file = self.level = @__instance = nil
    end
    
    # Singleton instance
    def self.instance
      @__instance ||= begin
        log = nil
        
        if @file && @level
          log = new(self.file)
          log.level = self.level
        end
        
        log
      end
    end
    
    # 
    # LogMethods module for log method including, e.g.:
    # 
    # class MyClass
    #   include Protobuf::Logger::LogMethods
    #   ...
    # end
    # 
    # Produce a module to allow "include" in other classes to avoid
    # cluttering the namespace of the including class with the other methods defined above
    # 
    module LogMethods
      [:debug, :info, :warn, :error, :fatal, :any, :add, :log].each do |m|
        define_method("log_#{m}") do |*params, &block|
          Protobuf::Logger.__send__(m, *params, &block)
        end
      end

      def self.included(base)
        base.extend(LogMethods)
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
protobuf-1.4.2 lib/protobuf/common/logger.rb
protobuf-1.4.1 lib/protobuf/common/logger.rb
protobuf-1.4.0 lib/protobuf/common/logger.rb
protobuf-1.3.0 lib/protobuf/common/logger.rb