Sha256: 1041f1fd647a31f1a152f3ba9ab9b71034e1a18b356c7fc9727dea0bd7573960

Contents?: true

Size: 1.84 KB

Versions: 2

Compression:

Stored size: 1.84 KB

Contents

require_relative 'logger/null_logger'

require 'logger'
require 'time'

class Logger
  class Better < Logger
    module LevelPatch
      def level=(value)
        if value.is_a? Symbol
          @level = mapping.fetch(value, Logger::UNKNOWN)
        else
          @level = value
        end
      end

      def mapping
        {
          debug: Logger::DEBUG,
          info: Logger::INFO,
          warn: Logger::WARN,
          error: Logger::ERROR,
          fatal: Logger::FATAL,
          unknown: Logger::UNKNOWN
        }
      end
    end

    include LevelPatch

    class << self
      def no_timestamp(*args, &block)
        new(*args, &block).tap do |logger|
          logger.formatter = NoTimestampFormatter.new
        end
      end
    end

    def initialize(*)
      super
      @formatter = TimestampFormatter.new
    end

    class TimestampFormatter < Formatter
      def call(severity, time, progname, msg)
        format % [
          time.utc.iso8601,
          progname,
          $$,
          severity,
          msg2str(msg).strip
        ]
      end

      def format
        "%s [%s#%d] %5s: %s\n"
      end
    end

    class NoTimestampFormatter < Formatter
      def call(severity, time, progname, msg)
        format % [
          progname,
          $$,
          severity,
          msg2str(msg).strip
        ]
      end

      def format
        "[%s#%d] %5s: %s\n"
      end
    end
  end

  module BetterPatch
    def initialize(*)
      super
      @formatter = Better::TimestampFormatter.new
    end

    class << self
      def included(base)
        base.prepend Better::LevelPatch
      end
    end
  end

  module NoTimestampPatch
    def initialize(*)
      super
      @formatter = Better::NoTimestampFormatter.new
    end

    class << self
      def included(base)
        base.prepend Better::LevelPatch
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
logger-better-0.2.2 lib/logger-better.rb
logger-better-0.2.1 lib/logger-better.rb