lorekeeper 1.6.2 → 1.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d61606d89f285ae3a17849136a54458689a32aa2
4
- data.tar.gz: 667a0f789f27c27303509c4ca254ef956e34028a
3
+ metadata.gz: '055989651779854042e33d2d16964ab14024c6de'
4
+ data.tar.gz: 5244927f5b0474aa268bcb19023c0a756d9f05b6
5
5
  SHA512:
6
- metadata.gz: 09f0e761139364e6c219ed4bd6a01b098e2d5e9ac170e663deed23654555908ecdf0b7ac455e8cfe6c7c1d3fed296743008e3c7a1246fe3760e4747a39f00f2c
7
- data.tar.gz: e3883fcac259aee4cfcdb1622c1d85a454a389252c3bbd39dce62281289f04ae2e98ee19d50d37c2f46b49c37da676667c174cde837c8c7c88f1bfc9b635fcf2
6
+ metadata.gz: 2592040a77cfce274449eebaa446b57c5f690e34335dd39a686161c3c0ffc20b1f0ba93d9f42760080d44c50918158db41e8bc816ceeeca68bbd167e03a1f9be
7
+ data.tar.gz: 9af69c2084fb453a53207a87061acdbcf774c07760024ee8e4f497dbf031a07f4648f7c51a19e22b21b98a2fed5ce78e6119a6c6ebe3bd8d71a97a110310d529
@@ -1,2 +1,2 @@
1
1
  Metrics/LineLength:
2
- Max: 100
2
+ Max: 120
@@ -1,10 +1,12 @@
1
- language: 'ruby'
2
- cache: 'bundler'
3
- sudo: false
1
+ language: ruby
2
+ cache: bundler
4
3
 
5
4
  rvm:
6
- - 2.1.8
7
- - 2.2.4
8
- - 2.3.0
9
- - 2.4.0
10
- script: 'bundle exec rspec'
5
+ - 2.1.10
6
+ - 2.2.10
7
+ - 2.3.8
8
+ - 2.4.5
9
+ - 2.5.3
10
+ - 2.6.0-rc1
11
+
12
+ script: bundle exec rspec
@@ -1,3 +1,6 @@
1
+ # 1.7.0
2
+ * Add the `level` property to the JSON Logger output
3
+
1
4
  # 1.6.2
2
5
  * Update oj gem to resolve segmentation fault issue
3
6
 
data/README.md CHANGED
@@ -10,49 +10,78 @@ When used without extra fields it outputs 20% faster than the standard Logger fo
10
10
  Add this line to your application's Gemfile:
11
11
 
12
12
  ```ruby
13
- gem 'lorekeeper'
13
+ gem 'lorekeeper', '~> 1.7'
14
14
  ```
15
15
 
16
16
  And then execute:
17
17
 
18
- $ bundle
18
+ ```sh
19
+ bundle
20
+ ```
19
21
 
20
22
 
21
23
  ## Usage
22
24
 
23
25
  ### Normal logging methods
24
26
 
25
- LoreKeeper::JSONLogger API is compatible with standard lib's Logger's. Level is not showed in the output.
27
+ [LoreKeeper::JSONLogger](./lib/lorekeeper/json_logger.rb) API is compatible with the stdlib's Logger's.
26
28
 
27
- ```Ruby
29
+ ```ruby
28
30
  logger.error("This is a message")
29
31
  ```
30
32
 
31
33
  Will output:
32
34
  ```
33
- { "message": "This is a message", "timestamp": "1970-01-01T00:00:00.000+0100" }
35
+ {
36
+ "message": "This is a message",
37
+ "timestamp": "1970-01-01T00:00:00.000+0100",
38
+ "level": "debug"
39
+ }
34
40
  ```
35
41
 
36
- Timestamps use ISO8601
37
- Messages are json escaped so the total result is JSON parseable.
42
+ Timestamps use ISO8601.
43
+ Messages are JSON escaped so the total result is JSON parseable.
44
+
45
+
46
+ ### Log Levels
47
+
48
+ | Method Name | JSON Property |
49
+ | ----------- | ---------------------- |
50
+ | debug | "level": "debug" |
51
+ | info | "level": "info" |
52
+ | warn | **"level": "warning"** |
53
+ | error | "level": "error" |
54
+ | fatal | "level": "fatal" |
38
55
 
39
56
 
40
57
  ### Adding keys to the output
41
58
 
42
- Keys can be added to the output at any moment. These keys will be output in each message till they are removed again. If you want to output keys in only one message use the _with_data method instead.
59
+ Keys can be added to the output at any moment.
60
+ These keys will be output in each message till they are removed again.
61
+ If you want to output keys in only one message use the `*_with_data` method instead.
43
62
 
44
63
  Keys can be added using the `add_fields` method which accepts a hash:
45
64
 
46
- ```Ruby
47
- logger.add_fields( 'role' => 'backend' )
65
+ ```ruby
66
+ logger.add_fields("role" => "backend")
48
67
  logger.error("This is a message")
49
- logger.warning("This is another message")
68
+ logger.warn("This is another message")
50
69
  ```
51
70
 
52
71
  Will output:
53
- ```json
54
- { "message": "This is a message", "timestamp": "1970-01-01T00:00:00.000+0100", "role": "backend" }
55
- { "message": "This is another message", "timestamp": "1970-01-01T00:00:00.000+0100", "role": "backend" }
72
+ ```javascript
73
+ {
74
+ "message": "This is a message",
75
+ "timestamp": "1970-01-01T00:00:00.000+0100",
76
+ "level": "error",
77
+ "role": "backend"
78
+ }
79
+ {
80
+ "message": "This is another message",
81
+ "timestamp": "1970-01-01T00:00:00.000+0100",
82
+ "level": "warning",
83
+ "role": "backend"
84
+ }
56
85
  ```
57
86
 
58
87
  Because of speed purposes the JSON dumping is done as simply as possible. If you provide a hash of keys like:
@@ -60,23 +89,31 @@ Because of speed purposes the JSON dumping is done as simply as possible. If you
60
89
  { key: 'value' }
61
90
  ```
62
91
  The output will include:
63
- ```json
92
+ ```javascript
64
93
  { ":key": "value" }
65
94
  ```
66
95
 
67
96
 
68
97
  ### Logging methods with data
69
98
 
70
- All methods (info, debug, etc.) has a _with_data equivalent: "info_with_data", "debug_with_data".
99
+ All methods (info, debug, etc.) have a `*_with_data` equivalent: `info_with_data`, `debug_with_data`, etc.
71
100
  These methods accept and extra hash to add it to the JSON.
72
101
 
73
- ```Ruby
74
- logger.error_with_data('message', {data1: 'Extra data', data2: 'Extra data2'})
102
+ ```ruby
103
+ logger.error_with_data('message', { data1: 'Extra data', data2: 'Extra data2' })
75
104
  ```
76
105
 
77
106
  Will output:
78
- ```json
79
- { "message": "This is a message", "timestamp": "1970-01-01T00:00:00.000+0100", "data": {"data1": "Extra data", "data2": "Extra data2"} }
107
+ ```javascript
108
+ {
109
+ "message": "This is a message",
110
+ "timestamp": "1970-01-01T00:00:00.000+0100",
111
+ "level": "debug",
112
+ "data": {
113
+ "data1": "Extra data",
114
+ "data2": "Extra data2"
115
+ }
116
+ }
80
117
  ```
81
118
 
82
119
 
@@ -84,23 +121,27 @@ Will output:
84
121
 
85
122
  There is a method to help you log exceptions in an standard way.
86
123
 
87
- ```Ruby
88
- rescue StandardError => e
124
+ ```ruby
125
+ rescue => e
89
126
  logger.exception(e)
127
+ end
90
128
  ```
91
129
 
92
130
  Will output:
93
- ```json
94
- { "message": "#{e.message}", "timestamp": "1970-01-01T00:00:00.000+0100", "exception": "<exception name>", "stack": ["<stacktraceline1>", "<stacktraceline2>"] }
131
+ ```javascript
132
+ {
133
+ "message": "#{e.message}",
134
+ "timestamp": "1970-01-01T00:00:00.000+0100",
135
+ "level": "error",
136
+ "exception": "<exception name>",
137
+ "stack": [
138
+ "<stacktraceline1>",
139
+ "<stacktraceline2>"
140
+ ]
141
+ }
95
142
  ```
96
143
 
97
144
 
98
- ## Contributing
99
-
100
- Bug reports and pull requests are welcome on GitHub at https://github.com/JordiPolo/lorekeeper.
101
-
102
-
103
145
  ## License
104
146
 
105
- The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
106
-
147
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'lorekeeper/version'
2
4
  require 'lorekeeper/fast_logger'
3
5
  require 'lorekeeper/simple_logger'
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # The comment above will make all strings in a current file frozen
2
+
3
3
  require 'logger'
4
4
 
5
5
  module Lorekeeper
@@ -21,8 +21,29 @@ module Lorekeeper
21
21
  @file = file # We only keep this so we can inspect where we are sending the logs
22
22
  end
23
23
 
24
- LOGGING_METHODS = [:debug, :info, :warn, :error, :fatal]
25
- METHOD_SEVERITY_MAP = { debug: DEBUG, info: INFO, warn: WARN, error: ERROR, fatal: FATAL }
24
+ LOGGING_METHODS = [
25
+ :debug,
26
+ :info,
27
+ :warn,
28
+ :error,
29
+ :fatal
30
+ ].freeze
31
+
32
+ METHOD_SEVERITY_MAP = {
33
+ debug: DEBUG,
34
+ info: INFO,
35
+ warn: WARN,
36
+ error: ERROR,
37
+ fatal: FATAL
38
+ }.freeze
39
+
40
+ SEVERITY_NAMES_MAP = {
41
+ DEBUG => 'debug',
42
+ INFO => 'info',
43
+ WARN => 'warning',
44
+ ERROR => 'error',
45
+ FATAL => 'fatal'
46
+ }.freeze
26
47
 
27
48
  # We define the behaviour of all the usual logging methods
28
49
  # We support a string as a parameter and also a block
@@ -69,6 +90,7 @@ module Lorekeeper
69
90
 
70
91
  def write(message)
71
92
  return unless @iodevice
93
+
72
94
  @iomutex.synchronize do
73
95
  @iodevice.write(message)
74
96
  end
@@ -78,11 +100,13 @@ module Lorekeeper
78
100
 
79
101
  def to_iodevice(file)
80
102
  return nil unless file
81
- iodevice = if file.respond_to?(:write) and file.respond_to?(:close)
103
+
104
+ iodevice = if file.respond_to?(:write) && file.respond_to?(:close)
82
105
  file
83
106
  else
84
107
  open_logfile(file)
85
108
  end
109
+
86
110
  iodevice.sync = true if iodevice.respond_to?(:sync=)
87
111
  iodevice
88
112
  end
@@ -1,15 +1,14 @@
1
1
  # frozen_string_literal: true
2
- # The comment above will make all strings in a current file frozen
2
+
3
3
  require 'oj'
4
4
  require 'lorekeeper/fast_logger'
5
5
 
6
6
  module Lorekeeper
7
7
  # The JSONLogger provides a logger which will output messages in JSON format
8
8
  class JSONLogger < FastLogger
9
-
10
9
  def initialize(file)
11
10
  reset_state
12
- @base_fields = { MESSAGE => '', TIMESTAMP => '' }
11
+ @base_fields = { MESSAGE => '', TIMESTAMP => '', LEVEL => '' }
13
12
  super(file)
14
13
  end
15
14
 
@@ -64,7 +63,9 @@ module Lorekeeper
64
63
  # @param exception: instance of a class inheriting from Exception
65
64
  # We will output backtrace twice. Once inside the stack so it can be parsed by software
66
65
  # And the other inside the message so it is readable to humans
67
- def exception(exception, custom_message = nil, custom_data = nil)
66
+ def exception(exception, custom_message = nil, custom_data = nil, level = :error)
67
+ log_level = METHOD_SEVERITY_MAP[level] || ERROR
68
+
68
69
  if exception.is_a?(Exception)
69
70
  backtrace = exception.backtrace || []
70
71
  exception_fields = {
@@ -74,10 +75,11 @@ module Lorekeeper
74
75
  exception_fields['data'] = custom_data if custom_data
75
76
 
76
77
  message = custom_message || exception.message
77
- with_extra_fields(exception_fields) { log_data(:error, message) }
78
+ with_extra_fields(exception_fields) { log_data(log_level, message) }
78
79
  else
79
- log_data(:warning, 'Logger exception called without exception class.')
80
- error_with_data("#{exception.class}: #{exception.inspect} #{custom_message}", custom_data)
80
+ log_data(METHOD_SEVERITY_MAP[:warn], 'Logger exception called without exception class.')
81
+ message = "#{exception.class}: #{exception.inspect} #{custom_message}"
82
+ with_extra_fields('data' => custom_data) { log_data(log_level, message) }
81
83
  end
82
84
  end
83
85
 
@@ -87,10 +89,11 @@ module Lorekeeper
87
89
 
88
90
  private
89
91
 
90
- THREAD_KEY = 'lorekeeper_jsonlogger_key'.freeze # Shared by all threads but unique by thread
91
- MESSAGE = 'message'.freeze
92
- TIMESTAMP = 'timestamp'.freeze
93
- DATE_FORMAT = '%FT%T.%6NZ'.freeze
92
+ THREAD_KEY = 'lorekeeper_jsonlogger_key' # Shared by all threads but unique by thread
93
+ LEVEL = 'level'
94
+ MESSAGE = 'message'
95
+ TIMESTAMP = 'timestamp'
96
+ DATE_FORMAT = '%FT%T.%6NZ'
94
97
 
95
98
  def with_extra_fields(fields)
96
99
  state[:extra_fields] = fields
@@ -104,7 +107,7 @@ module Lorekeeper
104
107
  end
105
108
  end
106
109
 
107
- def log_data(_severity, message)
110
+ def log_data(severity, message)
108
111
  # merging is slow, we do not want to merge with empty hash if possible
109
112
  fields_to_log = if state[:extra_fields].empty?
110
113
  state[:base_fields]
@@ -114,9 +117,9 @@ module Lorekeeper
114
117
 
115
118
  fields_to_log[MESSAGE] = message
116
119
  fields_to_log[TIMESTAMP] = Time.now.utc.strftime(DATE_FORMAT)
120
+ fields_to_log[LEVEL] = SEVERITY_NAMES_MAP[severity]
117
121
 
118
122
  @iodevice.write(Oj.dump(fields_to_log) << "\n")
119
123
  end
120
124
  end
121
-
122
125
  end
@@ -1,7 +1,8 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Lorekeeper
3
4
  # Allows to create a logger that will pass information to any logger registered
4
- # It is useful so send the same message thought different loggers to different sinks
5
+ # It is useful so send the same message through different loggers to different sinks
5
6
  class MultiLogger
6
7
  def initialize
7
8
  @loggers = []
@@ -16,7 +17,7 @@ module Lorekeeper
16
17
  end
17
18
 
18
19
  def respond_to?(method)
19
- @loggers.all?{ |logger| logger.respond_to?(method) }
20
+ @loggers.all? { |logger| logger.respond_to?(method) }
20
21
  end
21
22
 
22
23
  def method_missing(method, *args, &block)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # The comment above will make all strings in a current file frozen
2
+
3
3
  require 'lorekeeper/fast_logger'
4
4
 
5
5
  module Lorekeeper
@@ -10,13 +10,19 @@ module Lorekeeper
10
10
  # 33: yellow
11
11
  # 31: red
12
12
  # 37: light gray
13
+
14
+ COLOR_DEFAULT = '39'
15
+ COLOR_YELLOW = '33'
16
+ COLOR_RED = '31'
17
+ COLOR_LIGHT_GRAY = '37'
18
+
13
19
  SEVERITY_TO_COLOR_MAP = {
14
- DEBUG => '39'.freeze,
15
- INFO => DEBUG,
16
- WARN => '33'.freeze,
17
- ERROR => '31'.freeze,
18
- FATAL => ERROR,
19
- UNKNOWN => '37'.freeze
20
+ DEBUG => COLOR_DEFAULT,
21
+ INFO => COLOR_DEFAULT,
22
+ WARN => COLOR_YELLOW,
23
+ ERROR => COLOR_RED,
24
+ FATAL => COLOR_RED,
25
+ UNKNOWN => COLOR_LIGHT_GRAY
20
26
  }.freeze
21
27
 
22
28
  # \e[colorm sets a color \e[0m resets all properties
@@ -37,16 +43,17 @@ module Lorekeeper
37
43
  end
38
44
  end
39
45
 
40
- def exception(exception, custom_message = nil, custom_data = nil)
46
+ def exception(exception, custom_message = nil, custom_data = nil, level = :error)
47
+ log_level = METHOD_SEVERITY_MAP[level] || ERROR
48
+
41
49
  if exception.is_a?(Exception)
42
50
  backtrace = exception.backtrace || []
43
51
  message = custom_message || exception.message
44
- error_with_data("#{exception.class}: #{message}", backtrace.join("\n"))
52
+ log_data(log_level, "#{exception.class}: #{exception.message}; #{message}, data: #{backtrace.join("\n")}")
45
53
  else
46
- log_data(:warning, 'Logger exception called without exception class.')
54
+ log_data(METHOD_SEVERITY_MAP[:warn], 'Logger exception called without exception class.')
47
55
  error_with_data("#{exception.class}: #{exception.inspect} #{custom_message}", custom_data)
48
56
  end
49
57
  end
50
58
  end
51
-
52
59
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # The comment above will make all strings in a current file frozen
2
+
3
3
  module Lorekeeper
4
- VERSION = '1.6.2'.freeze
4
+ VERSION = '1.7.0'
5
5
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
- # The comment above will make all strings in a current file frozen
2
+
3
3
  lib = File.expand_path('../lib', __FILE__)
4
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
5
  require 'lorekeeper/version'
@@ -10,9 +10,9 @@ Gem::Specification.new do |spec|
10
10
  spec.authors = ['Jordi Polo']
11
11
  spec.email = ['mumismo@gmail.com']
12
12
 
13
- spec.summary = ' Very fast JSON logger '
14
- spec.description = ' Opinionated logger which outputs messages in JSON format '
15
- spec.homepage = 'http://www.github.com/jordipolo/lorekeeper'
13
+ spec.summary = 'Very fast JSON logger'
14
+ spec.description = 'Opinionated logger which outputs messages in JSON format'
15
+ spec.homepage = 'https://github.com/JordiPolo/lorekeeper'
16
16
  spec.license = 'MIT'
17
17
 
18
18
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
@@ -20,13 +20,16 @@ Gem::Specification.new do |spec|
20
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ['lib']
22
22
 
23
- spec.add_dependency 'oj', '>= 3.3.1', '< 4.0'
23
+ spec.required_ruby_version = '>= 2.1.0'
24
+
25
+ spec.add_dependency 'oj', '>= 3.4', '< 4.0'
24
26
 
25
- spec.add_development_dependency 'bundler', '~> 1.7'
26
- spec.add_development_dependency 'rake', '~> 10.0'
27
+ spec.add_development_dependency 'bundler', '>= 1.16', '< 3.0'
28
+ spec.add_development_dependency 'rake', '~> 12.0'
27
29
  spec.add_development_dependency 'rspec', '~> 3.4'
28
30
  spec.add_development_dependency 'benchmark-ips', '~> 2.3'
29
31
  spec.add_development_dependency 'timecop', '~> 0.8'
30
32
  spec.add_development_dependency 'byebug', '~> 8.0'
31
33
  spec.add_development_dependency 'rbtrace', '~> 0.4'
34
+ spec.add_development_dependency 'simplecov', '~> 0.16'
32
35
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lorekeeper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jordi Polo
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-07-12 00:00:00.000000000 Z
11
+ date: 2018-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 3.3.1
19
+ version: '3.4'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '4.0'
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 3.3.1
29
+ version: '3.4'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '4.0'
@@ -34,30 +34,36 @@ dependencies:
34
34
  name: bundler
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
- - - "~>"
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '1.16'
40
+ - - "<"
38
41
  - !ruby/object:Gem::Version
39
- version: '1.7'
42
+ version: '3.0'
40
43
  type: :development
41
44
  prerelease: false
42
45
  version_requirements: !ruby/object:Gem::Requirement
43
46
  requirements:
44
- - - "~>"
47
+ - - ">="
45
48
  - !ruby/object:Gem::Version
46
- version: '1.7'
49
+ version: '1.16'
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '3.0'
47
53
  - !ruby/object:Gem::Dependency
48
54
  name: rake
49
55
  requirement: !ruby/object:Gem::Requirement
50
56
  requirements:
51
57
  - - "~>"
52
58
  - !ruby/object:Gem::Version
53
- version: '10.0'
59
+ version: '12.0'
54
60
  type: :development
55
61
  prerelease: false
56
62
  version_requirements: !ruby/object:Gem::Requirement
57
63
  requirements:
58
64
  - - "~>"
59
65
  - !ruby/object:Gem::Version
60
- version: '10.0'
66
+ version: '12.0'
61
67
  - !ruby/object:Gem::Dependency
62
68
  name: rspec
63
69
  requirement: !ruby/object:Gem::Requirement
@@ -128,7 +134,21 @@ dependencies:
128
134
  - - "~>"
129
135
  - !ruby/object:Gem::Version
130
136
  version: '0.4'
131
- description: " Opinionated logger which outputs messages in JSON format "
137
+ - !ruby/object:Gem::Dependency
138
+ name: simplecov
139
+ requirement: !ruby/object:Gem::Requirement
140
+ requirements:
141
+ - - "~>"
142
+ - !ruby/object:Gem::Version
143
+ version: '0.16'
144
+ type: :development
145
+ prerelease: false
146
+ version_requirements: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - "~>"
149
+ - !ruby/object:Gem::Version
150
+ version: '0.16'
151
+ description: Opinionated logger which outputs messages in JSON format
132
152
  email:
133
153
  - mumismo@gmail.com
134
154
  executables: []
@@ -153,7 +173,7 @@ files:
153
173
  - lib/lorekeeper/simple_logger.rb
154
174
  - lib/lorekeeper/version.rb
155
175
  - lorekeeper.gemspec
156
- homepage: http://www.github.com/jordipolo/lorekeeper
176
+ homepage: https://github.com/JordiPolo/lorekeeper
157
177
  licenses:
158
178
  - MIT
159
179
  metadata: {}
@@ -165,7 +185,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
165
185
  requirements:
166
186
  - - ">="
167
187
  - !ruby/object:Gem::Version
168
- version: '0'
188
+ version: 2.1.0
169
189
  required_rubygems_version: !ruby/object:Gem::Requirement
170
190
  requirements:
171
191
  - - ">="
@@ -173,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
193
  version: '0'
174
194
  requirements: []
175
195
  rubyforge_project:
176
- rubygems_version: 2.6.8
196
+ rubygems_version: 2.6.14
177
197
  signing_key:
178
198
  specification_version: 4
179
199
  summary: Very fast JSON logger