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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 57d404bf8defccccc9a8f05b57bf3779a512e5ac67a095ac1c994aa487fb7ee3
4
- data.tar.gz: df5fa3f1b23c19126d86e197240c215ea6bedd9fce870e6ad0bfdda149f6dace
3
+ metadata.gz: 329985023815903e40757931bee2d0fef32a2f0e9e703570306b58acc403db34
4
+ data.tar.gz: 30d2bc94716af0bbb5781fa8d43404154bd5e11cda6fc94b7d3564e0d0d17a0a
5
5
  SHA512:
6
- metadata.gz: b49cb0632467d2174d3f3f75e3abc2e54e1215ae4ff67f7bcf111048f6e24ef533a50ab75c6cb7880b4cd8176f03d3a09e6df7ae0cf46d8e79aa45676c2763e4
7
- data.tar.gz: 76f8ee7fa78bab1250bcece99cb1f46edaeeab33dbab9d4bcd661e411feadf74e1157f8d9f3aeffb2b0f4b95a3e226e23f6d4dcf94e35b9d34dfbc472fce7cfb
6
+ metadata.gz: bc955d714639abbec8d7452915e4b6b166a7b5768b37cc29f14a61404aac48fd06d6d066e9c6f601824c8092dab56daefe6bc0ea834e760a2dca75dd44f180e7
7
+ data.tar.gz: 36fac211a1ffc773b51614d53ff72dcf0d3c83b6adebc511b8694a77bfa9d3e7dd0c00c17e710d111881594da046a76f0bf06dd8ea1bbfaa6232a5a879689ad9
@@ -18,3 +18,6 @@ Metrics/MethodLength:
18
18
  # Configuration parameters: IgnoredMethods.
19
19
  Metrics/AbcSize:
20
20
  Max: 30
21
+
22
+ RSpec/LeakyConstantDeclaration:
23
+ Enabled: false
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2020-04-22 16:12:47 +0300 using RuboCop version 0.82.0.
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
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- active_logger (0.3.0)
4
+ active_logger (0.4.0)
5
5
  activesupport (>= 5.0.0)
6
6
 
7
7
  GEM
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.
@@ -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
@@ -13,10 +13,6 @@ module ActiveLogger #:nodoc:
13
13
  def appenders
14
14
  @appenders ||= []
15
15
  end
16
-
17
- private
18
-
19
- def reset!; end
20
16
  end
21
17
  end
22
18
  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
@@ -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
- ActiveSupport::Logger::SimpleFormatter.new
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
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ActiveLogger
4
- VERSION = '0.3.0'
4
+ VERSION = '0.4.0'
5
5
  end
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.3.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