Sha256: 289cb64c2585ea12b6e0716a2f99a99a9478b8cb88ada03fe1a58ada7c282bc9

Contents?: true

Size: 1.48 KB

Versions: 1

Compression:

Stored size: 1.48 KB

Contents

require 'logger'

module TaggedLogging
  def self.included(receiver)
    receiver.class_eval do
      extend                ClassMethods
      include               InstanceMethods
    end
  end

  module ClassMethods
    def tagged(*new_tags, &block)
      new_tags = push_tags(*new_tags)
      yield(self)
    ensure
      pop_tags(new_tags.size)
    end

    [:push_tags, :pop_tags, :clear_tags!].each do |method_name|
      define_method(method_name) do |*args, &block|
        logger.formatter.send(method_name, *args, &block)
      end
    end

    def logger
      @@logger ||= ::Logger.new(STDOUT).tap do |l|
        l.level = ::Logger::INFO
        l.formatter = ::TaggedLogging::Formatter.new
      end
    end

    def logger=(logger)
      @@logger = logger
    end

    def flush
      clear_tags!
      logger.flush if defined?(logger.super)
    end

    [:debug, :info, :warn, :error, :fatal].each do |method_name|
      define_method(method_name) do |*args, &block|
        self.logger.send(method_name, *args, &block)
      end
    end
  end

  module InstanceMethods
    [:debug, :info, :warn, :error, :fatal].each do |method_name|
      define_method(method_name) do |*args, &block|
        self.class.logger.send(method_name, *args, &block)
      end
    end

    [:tagged, :flush, :logger, :logger=, :push_tags, :pop_tags, :clear_tags!].each do |method_name|
      define_method(method_name) do |*args, &block|
        self.class.send(method_name, *args, &block)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
tagged_logging-0.1.0 lib/tagged_logging/logger.rb