active_logger 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/.rubocop_todo.yml +1 -1
- data/Gemfile.lock +1 -1
- data/README.md +53 -0
- data/lib/active_logger.rb +7 -0
- data/lib/active_logger/formatters/base.rb +59 -0
- data/lib/active_logger/formatters/default.rb +12 -0
- data/lib/active_logger/formatters/json.rb +24 -0
- data/lib/active_logger/helpers/appender.rb +0 -4
- data/lib/active_logger/helpers/formatter.rb +37 -0
- data/lib/active_logger/helpers/level.rb +36 -0
- data/lib/active_logger/logger.rb +7 -0
- data/lib/active_logger/tagged_logging.rb +1 -51
- data/lib/active_logger/version.rb +1 -1
- metadata +6 -1
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 329985023815903e40757931bee2d0fef32a2f0e9e703570306b58acc403db34
         | 
| 4 | 
            +
              data.tar.gz: 30d2bc94716af0bbb5781fa8d43404154bd5e11cda6fc94b7d3564e0d0d17a0a
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: bc955d714639abbec8d7452915e4b6b166a7b5768b37cc29f14a61404aac48fd06d6d066e9c6f601824c8092dab56daefe6bc0ea834e760a2dca75dd44f180e7
         | 
| 7 | 
            +
              data.tar.gz: 36fac211a1ffc773b51614d53ff72dcf0d3c83b6adebc511b8694a77bfa9d3e7dd0c00c17e710d111881594da046a76f0bf06dd8ea1bbfaa6232a5a879689ad9
         | 
    
        data/.rubocop.yml
    CHANGED
    
    
    
        data/.rubocop_todo.yml
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # This configuration was generated by
         | 
| 2 2 | 
             
            # `rubocop --auto-gen-config`
         | 
| 3 | 
            -
            # on 2020-04-22  | 
| 3 | 
            +
            # on 2020-04-22 17:28:02 +0300 using RuboCop version 0.82.0.
         | 
| 4 4 | 
             
            # The point is for the user to remove these configuration records
         | 
| 5 5 | 
             
            # one by one as the offenses are removed from the code base.
         | 
| 6 6 | 
             
            # Note that changes in the inspected code, or installation of new
         | 
    
        data/Gemfile.lock
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -61,6 +61,59 @@ end | |
| 61 61 | 
             
            logger.info 'test'
         | 
| 62 62 | 
             
            ```
         | 
| 63 63 |  | 
| 64 | 
            +
            ### Example: Tagging
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            ```ruby
         | 
| 67 | 
            +
            logger = ActiveLogger.new STDOUT
         | 
| 68 | 
            +
            logger.tagged('API').info 'test'
         | 
| 69 | 
            +
             | 
| 70 | 
            +
            # or
         | 
| 71 | 
            +
             | 
| 72 | 
            +
            logger.tagged('API') do
         | 
| 73 | 
            +
              logger.info 'test'
         | 
| 74 | 
            +
            end
         | 
| 75 | 
            +
            ```
         | 
| 76 | 
            +
             | 
| 77 | 
            +
            ### Example: Setting the Log Level
         | 
| 78 | 
            +
             | 
| 79 | 
            +
            ```ruby
         | 
| 80 | 
            +
            ActiveLogger.new STDOUT, level: :info
         | 
| 81 | 
            +
             | 
| 82 | 
            +
            # or
         | 
| 83 | 
            +
             | 
| 84 | 
            +
            ActiveLogger.new do |al|
         | 
| 85 | 
            +
              al.level = :debug
         | 
| 86 | 
            +
             | 
| 87 | 
            +
              al.appender :stdout
         | 
| 88 | 
            +
            end
         | 
| 89 | 
            +
            ```
         | 
| 90 | 
            +
             | 
| 91 | 
            +
            ### Example: Formatters
         | 
| 92 | 
            +
             | 
| 93 | 
            +
            There are 2 standard formatters: `:default` and `:json`.
         | 
| 94 | 
            +
             | 
| 95 | 
            +
            ```ruby
         | 
| 96 | 
            +
            ActiveLogger.new STDOUT, formatter: :json
         | 
| 97 | 
            +
             | 
| 98 | 
            +
            # or
         | 
| 99 | 
            +
             | 
| 100 | 
            +
            ActiveLogger.new do |al|
         | 
| 101 | 
            +
              al.formatter = :json
         | 
| 102 | 
            +
             | 
| 103 | 
            +
              al.appender :stdout
         | 
| 104 | 
            +
            end
         | 
| 105 | 
            +
             | 
| 106 | 
            +
            # or custom formatter
         | 
| 107 | 
            +
             | 
| 108 | 
            +
            class Formatter < ActiveLogger::Formatters::Base
         | 
| 109 | 
            +
              def call(severity, timestamp, progname, msg)
         | 
| 110 | 
            +
                "[#{severity}] [#{timestamp}] #{msg}"
         | 
| 111 | 
            +
              end
         | 
| 112 | 
            +
            end
         | 
| 113 | 
            +
             | 
| 114 | 
            +
            ActiveLogger.new STDOUT, formatter: Formatter
         | 
| 115 | 
            +
            ```
         | 
| 116 | 
            +
             | 
| 64 117 | 
             
            ## Development
         | 
| 65 118 |  | 
| 66 119 | 
             
            After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
         | 
    
        data/lib/active_logger.rb
    CHANGED
    
    | @@ -11,8 +11,15 @@ module ActiveLogger # :nodoc: | |
| 11 11 | 
             
              end
         | 
| 12 12 | 
             
            end
         | 
| 13 13 |  | 
| 14 | 
            +
            # Formatters
         | 
| 15 | 
            +
            require File.dirname(__FILE__) + '/active_logger/formatters/base'
         | 
| 16 | 
            +
            require File.dirname(__FILE__) + '/active_logger/formatters/default'
         | 
| 17 | 
            +
            require File.dirname(__FILE__) + '/active_logger/formatters/json'
         | 
| 18 | 
            +
             | 
| 14 19 | 
             
            # Helpers
         | 
| 15 20 | 
             
            require File.dirname(__FILE__) + '/active_logger/helpers/base'
         | 
| 21 | 
            +
            require File.dirname(__FILE__) + '/active_logger/helpers/level'
         | 
| 22 | 
            +
            require File.dirname(__FILE__) + '/active_logger/helpers/formatter'
         | 
| 16 23 | 
             
            require File.dirname(__FILE__) + '/active_logger/helpers/appender'
         | 
| 17 24 |  | 
| 18 25 | 
             
            require File.dirname(__FILE__) + '/active_logger/tagged_logging'
         | 
| @@ -0,0 +1,59 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'English'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module ActiveLogger
         | 
| 6 | 
            +
              module Formatters
         | 
| 7 | 
            +
                class Base < ActiveSupport::Logger::Formatter # :nodoc:
         | 
| 8 | 
            +
                  def call(severity, timestamp, progname, msg)
         | 
| 9 | 
            +
                    super(severity, timestamp, progname, msg)
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  def tagged(*tags)
         | 
| 13 | 
            +
                    new_tags = push_tags(*tags)
         | 
| 14 | 
            +
                    yield self
         | 
| 15 | 
            +
                  ensure
         | 
| 16 | 
            +
                    pop_tags(new_tags.size)
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def push_tags(*tags)
         | 
| 20 | 
            +
                    @tags_text = nil
         | 
| 21 | 
            +
                    tags.flatten!
         | 
| 22 | 
            +
                    tags.reject!(&:blank?)
         | 
| 23 | 
            +
                    current_tags.concat tags
         | 
| 24 | 
            +
                    tags
         | 
| 25 | 
            +
                  end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  def pop_tags(size = 1)
         | 
| 28 | 
            +
                    @tags_text = nil
         | 
| 29 | 
            +
                    current_tags.pop size
         | 
| 30 | 
            +
                  end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                  def clear_tags!
         | 
| 33 | 
            +
                    @tags_text = nil
         | 
| 34 | 
            +
                    current_tags.clear
         | 
| 35 | 
            +
                  end
         | 
| 36 | 
            +
             | 
| 37 | 
            +
                  def current_tags
         | 
| 38 | 
            +
                    # We use our object ID here to avoid conflicting with other instances
         | 
| 39 | 
            +
                    thread_key = @thread_key ||= "activelogger_tagged_logging_tags:#{object_id}"
         | 
| 40 | 
            +
                    Thread.current[thread_key] ||= []
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                  def tags_text
         | 
| 44 | 
            +
                    @tags_text ||= begin
         | 
| 45 | 
            +
                      tags = current_tags
         | 
| 46 | 
            +
                      if tags.one?
         | 
| 47 | 
            +
                        "[#{tags[0]}] "
         | 
| 48 | 
            +
                      elsif tags.any?
         | 
| 49 | 
            +
                        tags.collect { |tag| "[#{tag}] " }.join
         | 
| 50 | 
            +
                      end
         | 
| 51 | 
            +
                    end
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  def pid
         | 
| 55 | 
            +
                    $PID
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
              end
         | 
| 59 | 
            +
            end
         | 
| @@ -0,0 +1,12 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
            # frozen_string_literal: true
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            module ActiveLogger
         | 
| 5 | 
            +
              module Formatters
         | 
| 6 | 
            +
                class Default < Base # :nodoc:
         | 
| 7 | 
            +
                  def call(severity, timestamp, progname, msg)
         | 
| 8 | 
            +
                    super(severity, timestamp, progname, "#{tags_text}#{msg}")
         | 
| 9 | 
            +
                  end
         | 
| 10 | 
            +
                end
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
            end
         | 
| @@ -0,0 +1,24 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require 'json'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module ActiveLogger
         | 
| 6 | 
            +
              module Formatters
         | 
| 7 | 
            +
                class Json < Base # :nodoc:
         | 
| 8 | 
            +
                  def call(severity, timestamp, progname, msg)
         | 
| 9 | 
            +
                    {
         | 
| 10 | 
            +
                      progname: progname,
         | 
| 11 | 
            +
                      severity: severity,
         | 
| 12 | 
            +
                      timestamp: timestamp.utc.strftime(datetime_format),
         | 
| 13 | 
            +
                      tags: current_tags,
         | 
| 14 | 
            +
                      pid: pid,
         | 
| 15 | 
            +
                      message: msg
         | 
| 16 | 
            +
                    }.to_json + "\n"
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  def datetime_format
         | 
| 20 | 
            +
                    '%FT%T.%6NZ'
         | 
| 21 | 
            +
                  end
         | 
| 22 | 
            +
                end
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
            end
         | 
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module ActiveLogger #:nodoc:
         | 
| 4 | 
            +
              module Helpers # :nodoc:
         | 
| 5 | 
            +
                module Formatter #:nodoc:
         | 
| 6 | 
            +
                  extend ActiveSupport::Concern
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  class FormatterNotFound < StandardError; end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  class_methods do
         | 
| 11 | 
            +
                    def formatter=(formatter)
         | 
| 12 | 
            +
                      @__formatter__ =
         | 
| 13 | 
            +
                        case formatter
         | 
| 14 | 
            +
                        when :default then ActiveLogger::Formatters::Default.new
         | 
| 15 | 
            +
                        when :json then ActiveLogger::Formatters::Json.new
         | 
| 16 | 
            +
                        else
         | 
| 17 | 
            +
                          raise FormatterNotFound unless formatter.class.ancestors.include?(ActiveLogger::Formatters::Base)
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                          formatter
         | 
| 20 | 
            +
                        end
         | 
| 21 | 
            +
                    end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                    def formatter
         | 
| 24 | 
            +
                      @__formatter__
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    private
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                    def reset!
         | 
| 30 | 
            +
                      @__formatter__ = ActiveLogger::Formatters::Default.new
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                      super if defined?(super)
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
            end
         | 
| @@ -0,0 +1,36 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module ActiveLogger #:nodoc:
         | 
| 4 | 
            +
              module Helpers # :nodoc:
         | 
| 5 | 
            +
                module Level #:nodoc:
         | 
| 6 | 
            +
                  extend ActiveSupport::Concern
         | 
| 7 | 
            +
             | 
| 8 | 
            +
                  SEVERITIES = %w[DEBUG INFO WARN ERROR FATAL UNKNOWN].freeze
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  class LevelNotFound < StandardError; end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  class_methods do
         | 
| 13 | 
            +
                    def level=(severity)
         | 
| 14 | 
            +
                      @__level__ =
         | 
| 15 | 
            +
                        case severity
         | 
| 16 | 
            +
                        when Integer then severity
         | 
| 17 | 
            +
                        when Symbol, String then SEVERITIES.index(severity.to_s.upcase)
         | 
| 18 | 
            +
                        else raise LevelNotFound
         | 
| 19 | 
            +
                        end
         | 
| 20 | 
            +
                    end
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    def level
         | 
| 23 | 
            +
                      @__level__
         | 
| 24 | 
            +
                    end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                    private
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                    def reset!
         | 
| 29 | 
            +
                      @__level__ = ActiveSupport::Logger::DEBUG
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                      super
         | 
| 32 | 
            +
                    end
         | 
| 33 | 
            +
                  end
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
              end
         | 
| 36 | 
            +
            end
         | 
    
        data/lib/active_logger/logger.rb
    CHANGED
    
    | @@ -5,6 +5,8 @@ module ActiveLogger | |
| 5 5 | 
             
                module_function
         | 
| 6 6 |  | 
| 7 7 | 
             
                include ActiveLogger::Helpers::Base
         | 
| 8 | 
            +
                include ActiveLogger::Helpers::Level
         | 
| 9 | 
            +
                include ActiveLogger::Helpers::Formatter
         | 
| 8 10 | 
             
                include ActiveLogger::Helpers::Appender
         | 
| 9 11 |  | 
| 10 12 | 
             
                class AppenderNotFound < StandardError; end
         | 
| @@ -16,6 +18,9 @@ module ActiveLogger | |
| 16 18 |  | 
| 17 19 | 
             
                  reset!
         | 
| 18 20 |  | 
| 21 | 
            +
                  self.formatter = options[:formatter] unless options[:formatter].nil?
         | 
| 22 | 
            +
                  self.level = options[:level] unless options[:level].nil?
         | 
| 23 | 
            +
             | 
| 19 24 | 
             
                  if block_given?
         | 
| 20 25 | 
             
                    block.arity.positive? ? block.call(self) : instance_eval(&block)
         | 
| 21 26 | 
             
                  else
         | 
| @@ -47,6 +52,8 @@ module ActiveLogger | |
| 47 52 | 
             
                  end
         | 
| 48 53 |  | 
| 49 54 | 
             
                  logger = ActiveSupport::Logger.new(*parameters)
         | 
| 55 | 
            +
                  logger.level = level
         | 
| 56 | 
            +
                  logger.formatter = formatter
         | 
| 50 57 | 
             
                  logger
         | 
| 51 58 | 
             
                end
         | 
| 52 59 | 
             
              end
         | 
| @@ -5,55 +5,6 @@ require 'active_support/core_ext/object/blank' | |
| 5 5 |  | 
| 6 6 | 
             
            module ActiveLogger
         | 
| 7 7 | 
             
              module TaggedLogging # :nodoc:
         | 
| 8 | 
            -
                module Formatter # :nodoc:
         | 
| 9 | 
            -
                  # This method is invoked when a log event occurs.
         | 
| 10 | 
            -
                  def call(severity, timestamp, progname, msg)
         | 
| 11 | 
            -
                    super(severity, timestamp, progname, "#{tags_text}#{msg}")
         | 
| 12 | 
            -
                  end
         | 
| 13 | 
            -
             | 
| 14 | 
            -
                  def tagged(*tags)
         | 
| 15 | 
            -
                    new_tags = push_tags(*tags)
         | 
| 16 | 
            -
                    yield self
         | 
| 17 | 
            -
                  ensure
         | 
| 18 | 
            -
                    pop_tags(new_tags.size)
         | 
| 19 | 
            -
                  end
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                  def push_tags(*tags)
         | 
| 22 | 
            -
                    @tags_text = nil
         | 
| 23 | 
            -
                    tags.flatten!
         | 
| 24 | 
            -
                    tags.reject!(&:blank?)
         | 
| 25 | 
            -
                    current_tags.concat tags
         | 
| 26 | 
            -
                    tags
         | 
| 27 | 
            -
                  end
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                  def pop_tags(size = 1)
         | 
| 30 | 
            -
                    @tags_text = nil
         | 
| 31 | 
            -
                    current_tags.pop size
         | 
| 32 | 
            -
                  end
         | 
| 33 | 
            -
             | 
| 34 | 
            -
                  def clear_tags!
         | 
| 35 | 
            -
                    @tags_text = nil
         | 
| 36 | 
            -
                    current_tags.clear
         | 
| 37 | 
            -
                  end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                  def current_tags
         | 
| 40 | 
            -
                    # We use our object ID here to avoid conflicting with other instances
         | 
| 41 | 
            -
                    thread_key = @thread_key ||= "activesupport_tagged_logging_tags:#{object_id}"
         | 
| 42 | 
            -
                    Thread.current[thread_key] ||= []
         | 
| 43 | 
            -
                  end
         | 
| 44 | 
            -
             | 
| 45 | 
            -
                  def tags_text
         | 
| 46 | 
            -
                    @tags_text ||= begin
         | 
| 47 | 
            -
                      tags = current_tags
         | 
| 48 | 
            -
                      if tags.one?
         | 
| 49 | 
            -
                        "[#{tags[0]}] "
         | 
| 50 | 
            -
                      elsif tags.any?
         | 
| 51 | 
            -
                        tags.collect { |tag| "[#{tag}] " }.join
         | 
| 52 | 
            -
                      end
         | 
| 53 | 
            -
                    end
         | 
| 54 | 
            -
                  end
         | 
| 55 | 
            -
                end
         | 
| 56 | 
            -
             | 
| 57 8 | 
             
                module LocalTagStorage # :nodoc:
         | 
| 58 9 | 
             
                  attr_accessor :current_tags
         | 
| 59 10 |  | 
| @@ -70,10 +21,9 @@ module ActiveLogger | |
| 70 21 | 
             
                      logger.formatter.dup
         | 
| 71 22 | 
             
                    else
         | 
| 72 23 | 
             
                      # Ensure we set a default formatter so we aren't extending nil!
         | 
| 73 | 
            -
                       | 
| 24 | 
            +
                      ActiveLogger::Formatters::Default.new
         | 
| 74 25 | 
             
                    end
         | 
| 75 26 |  | 
| 76 | 
            -
                  logger.formatter.extend Formatter
         | 
| 77 27 | 
             
                  logger.extend(self)
         | 
| 78 28 | 
             
                end
         | 
| 79 29 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: active_logger
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.4.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Yury Snegirev
         | 
| @@ -46,8 +46,13 @@ files: | |
| 46 46 | 
             
            - bin/console
         | 
| 47 47 | 
             
            - bin/setup
         | 
| 48 48 | 
             
            - lib/active_logger.rb
         | 
| 49 | 
            +
            - lib/active_logger/formatters/base.rb
         | 
| 50 | 
            +
            - lib/active_logger/formatters/default.rb
         | 
| 51 | 
            +
            - lib/active_logger/formatters/json.rb
         | 
| 49 52 | 
             
            - lib/active_logger/helpers/appender.rb
         | 
| 50 53 | 
             
            - lib/active_logger/helpers/base.rb
         | 
| 54 | 
            +
            - lib/active_logger/helpers/formatter.rb
         | 
| 55 | 
            +
            - lib/active_logger/helpers/level.rb
         | 
| 51 56 | 
             
            - lib/active_logger/logger.rb
         | 
| 52 57 | 
             
            - lib/active_logger/tagged_logging.rb
         | 
| 53 58 | 
             
            - lib/active_logger/version.rb
         |