lorekeeper 1.6.2 → 1.7.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 +1 -1
- data/.travis.yml +10 -8
- data/CHANGELOG.md +3 -0
- data/README.md +72 -31
- data/lib/lorekeeper.rb +2 -0
- data/lib/lorekeeper/fast_logger.rb +28 -4
- data/lib/lorekeeper/json_logger.rb +16 -13
- data/lib/lorekeeper/multi_logger.rb +3 -2
- data/lib/lorekeeper/simple_logger.rb +18 -11
- data/lib/lorekeeper/version.rb +2 -2
- data/lorekeeper.gemspec +10 -7
- metadata +34 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '055989651779854042e33d2d16964ab14024c6de'
|
4
|
+
data.tar.gz: 5244927f5b0474aa268bcb19023c0a756d9f05b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2592040a77cfce274449eebaa446b57c5f690e34335dd39a686161c3c0ffc20b1f0ba93d9f42760080d44c50918158db41e8bc816ceeeca68bbd167e03a1f9be
|
7
|
+
data.tar.gz: 9af69c2084fb453a53207a87061acdbcf774c07760024ee8e4f497dbf031a07f4648f7c51a19e22b21b98a2fed5ce78e6119a6c6ebe3bd8d71a97a110310d529
|
data/.rubocop.yml
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
Metrics/LineLength:
|
2
|
-
Max:
|
2
|
+
Max: 120
|
data/.travis.yml
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
-
language:
|
2
|
-
cache:
|
3
|
-
sudo: false
|
1
|
+
language: ruby
|
2
|
+
cache: bundler
|
4
3
|
|
5
4
|
rvm:
|
6
|
-
- 2.1.
|
7
|
-
- 2.2.
|
8
|
-
- 2.3.
|
9
|
-
- 2.4.
|
10
|
-
|
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
|
data/CHANGELOG.md
CHANGED
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
|
-
|
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
|
27
|
+
[LoreKeeper::JSONLogger](./lib/lorekeeper/json_logger.rb) API is compatible with the stdlib's Logger's.
|
26
28
|
|
27
|
-
```
|
29
|
+
```ruby
|
28
30
|
logger.error("This is a message")
|
29
31
|
```
|
30
32
|
|
31
33
|
Will output:
|
32
34
|
```
|
33
|
-
{
|
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
|
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.
|
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
|
-
```
|
47
|
-
logger.add_fields(
|
65
|
+
```ruby
|
66
|
+
logger.add_fields("role" => "backend")
|
48
67
|
logger.error("This is a message")
|
49
|
-
logger.
|
68
|
+
logger.warn("This is another message")
|
50
69
|
```
|
51
70
|
|
52
71
|
Will output:
|
53
|
-
```
|
54
|
-
{
|
55
|
-
|
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
|
-
```
|
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.)
|
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
|
-
```
|
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
|
-
```
|
79
|
-
{
|
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
|
-
```
|
88
|
-
rescue
|
124
|
+
```ruby
|
125
|
+
rescue => e
|
89
126
|
logger.exception(e)
|
127
|
+
end
|
90
128
|
```
|
91
129
|
|
92
130
|
Will output:
|
93
|
-
```
|
94
|
-
{
|
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](
|
106
|
-
|
147
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/lib/lorekeeper.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
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 = [
|
25
|
-
|
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
|
-
|
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
|
-
|
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(
|
78
|
+
with_extra_fields(exception_fields) { log_data(log_level, message) }
|
78
79
|
else
|
79
|
-
log_data(:
|
80
|
-
|
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'
|
91
|
-
|
92
|
-
|
93
|
-
|
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(
|
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
|
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
|
-
|
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 =>
|
15
|
-
INFO =>
|
16
|
-
WARN =>
|
17
|
-
ERROR =>
|
18
|
-
FATAL =>
|
19
|
-
UNKNOWN =>
|
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
|
-
|
52
|
+
log_data(log_level, "#{exception.class}: #{exception.message}; #{message}, data: #{backtrace.join("\n")}")
|
45
53
|
else
|
46
|
-
log_data(:
|
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
|
data/lib/lorekeeper/version.rb
CHANGED
data/lorekeeper.gemspec
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
|
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 = '
|
14
|
-
spec.description = '
|
15
|
-
spec.homepage = '
|
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.
|
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', '
|
26
|
-
spec.add_development_dependency 'rake', '~>
|
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.
|
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:
|
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.
|
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.
|
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: '
|
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.
|
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: '
|
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: '
|
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
|
-
|
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:
|
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:
|
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.
|
196
|
+
rubygems_version: 2.6.14
|
177
197
|
signing_key:
|
178
198
|
specification_version: 4
|
179
199
|
summary: Very fast JSON logger
|