Sha256: a1ef3ef16ca369619a3e8002c8913cada8c569172ecfc85aba848b9964befacd

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

require 'time'
module TaggedLogging
  class Formatter < ::Logger::Formatter

    FORMAT = "[%s] - %4s - %s - %s\n"

    def call(severity, time, progname, msg)
      str = case msg
            when ::String
              msg
            when ::Exception
              "#{ msg.message } (#{ msg.class })\n    | " <<
                (msg.backtrace || []).join("\n    | ")
            else
              msg.inspect
            end
      FORMAT % [format_datetime(time), severity, tags_text, msg]
    end

    def push_tags(*tags)
      tags.flatten.reject(&:blank?).tap do |new_tags|
        current_tags.concat new_tags
      end
    end

    def pop_tags(size = 1)
      current_tags.pop size
    end

    def clear_tags!
      current_tags.clear
    end

    def current_tags
      Thread.current[:__tagged_logging_current_tags] ||= []
    end

    def tags_text
      tags = current_tags
      if tags.any?
        tags.collect { |tag| "[#{tag}] " }.join.strip
      end
    end

    private
    def format_datetime(time)
      if @datetime_format.nil?
        time.iso8601
      else
        time.strftime(@datetime_format)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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