ougai 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +29 -0
- data/lib/ougai.rb +3 -0
- data/lib/ougai/child_logger.rb +24 -0
- data/lib/ougai/logger.rb +15 -43
- data/lib/ougai/logging.rb +64 -0
- data/lib/ougai/version.rb +1 -1
- data/spec/child_logger_spec.rb +300 -0
- data/spec/logging_spec.rb +18 -0
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 457d3322926c875ce7c6b72b7ae0f192a96788fe
|
4
|
+
data.tar.gz: eb2e3121f6a0b6367d7608b72344ca27ecb764ed
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb7ebaf9a4b3bd092410aef5778152f378e53a2a059cb450170e536bea78c6a64919be9325cc285e6b9978dfbf51d551e21155d544c492f9ea58904652acb5e6
|
7
|
+
data.tar.gz: 0f0d12daf3ad7959e8fb7c65599d07af6b427bdd8be262904b87781d6a439a9ba453a738387a496ee3bf677471609de9e6ebe64f7ea125dd957d1964c150a649
|
data/README.md
CHANGED
@@ -184,6 +184,35 @@ logger.info('Hello!', user: { name: 'Jiro' }, version: '2.3')
|
|
184
184
|
```
|
185
185
|
|
186
186
|
If any field of with_fields is specified in each log, the field is overridden.
|
187
|
+
But if the field's type is *Array*, both with_field value and logging value are merged with `concat` and `uniq`.
|
188
|
+
|
189
|
+
### Create a child logger
|
190
|
+
|
191
|
+
`logger.child(with_fields)` creates a child logger of self. Its argument `with_fields` add to all logs the child logger outputs. A child logger can also create its child logger.
|
192
|
+
|
193
|
+
```ruby
|
194
|
+
logger = Ougai::Logger.new(STDOUT)
|
195
|
+
logger.with_fields = { app: 'yourapp', tags: ['service'], kind: 'main' }
|
196
|
+
|
197
|
+
child_logger = logger.child({ tags:['user'], kind: 'logic' })
|
198
|
+
logger.info('Created child logger')
|
199
|
+
|
200
|
+
child_logger.info('Created a user', name: 'Mike')
|
201
|
+
|
202
|
+
gc_logger = child_logger.child({ kind: 'detail' })
|
203
|
+
child_logger.info('Created grand child logger')
|
204
|
+
|
205
|
+
gc_logger.debug('something detail', age: 34, weight: 72)
|
206
|
+
```
|
207
|
+
|
208
|
+
```json
|
209
|
+
{"name":"main","hostname":"mint2","pid":8342,"level":30,"time":"2017-08-01T22:07:20.400+09:00","v":0,"app":"yourapp","tags":["service"],"kind":"main","msg":"Created child logger"}
|
210
|
+
{"name":"Mike","hostname":"mint2","pid":8342,"level":30,"time":"2017-08-01T22:07:20.400+09:00","v":0,"app":"yourapp","tags":["service","user"],"kind":"logic","msg":"Created a user"}
|
211
|
+
{"name":"main","hostname":"mint2","pid":8342,"level":30,"time":"2017-08-01T22:07:20.400+09:00","v":0,"app":"yourapp","tags":["service","user"],"kind":"logic","msg":"Created grand child logger"}
|
212
|
+
{"name":"main","hostname":"mint2","pid":8342,"level":20,"time":"2017-08-01T22:07:20.400+09:00","v":0,"app":"yourapp","tags":["service","user"],"kind":"detail","age":34,"weight":72,"msg":"something detail"}
|
213
|
+
```
|
214
|
+
|
215
|
+
If any field exists in both parent log and child log, the parent value is overridden or merged by child value.
|
187
216
|
|
188
217
|
## View log by node-bunyan
|
189
218
|
|
data/lib/ougai.rb
CHANGED
@@ -0,0 +1,24 @@
|
|
1
|
+
module Ougai
|
2
|
+
class ChildLogger
|
3
|
+
include Logging
|
4
|
+
|
5
|
+
def initialize(parent, fields)
|
6
|
+
@parent = parent
|
7
|
+
@with_fields = fields
|
8
|
+
end
|
9
|
+
|
10
|
+
def level
|
11
|
+
@parent.level
|
12
|
+
end
|
13
|
+
|
14
|
+
def chain(severity, args, fields)
|
15
|
+
@parent.chain(severity, args, merge_fields(@with_fields, fields))
|
16
|
+
end
|
17
|
+
|
18
|
+
protected
|
19
|
+
|
20
|
+
def append(severity, args)
|
21
|
+
@parent.chain(severity, args, @with_fields)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/ougai/logger.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
|
-
require 'ougai/formatters/bunyan'
|
2
|
-
require 'logger'
|
3
|
-
|
4
1
|
module Ougai
|
5
2
|
class Logger < ::Logger
|
6
|
-
|
3
|
+
include Logging
|
4
|
+
|
5
|
+
attr_accessor :default_message, :exc_key
|
7
6
|
|
8
7
|
def initialize(*args)
|
9
8
|
super(*args)
|
@@ -13,41 +12,6 @@ module Ougai
|
|
13
12
|
@formatter = create_formatter
|
14
13
|
end
|
15
14
|
|
16
|
-
def debug(message = nil, ex = nil, data = nil, &block)
|
17
|
-
return true if level > DEBUG
|
18
|
-
args = block ? yield : [message, ex, data]
|
19
|
-
add(DEBUG, build_log(args))
|
20
|
-
end
|
21
|
-
|
22
|
-
def info(message = nil, ex = nil, data = nil, &block)
|
23
|
-
return true if level > INFO
|
24
|
-
args = block ? yield : [message, ex, data]
|
25
|
-
add(INFO, build_log(args))
|
26
|
-
end
|
27
|
-
|
28
|
-
def warn(message = nil, ex = nil, data = nil, &block)
|
29
|
-
return true if level > WARN
|
30
|
-
args = block ? yield : [message, ex, data]
|
31
|
-
add(WARN, build_log(args))
|
32
|
-
end
|
33
|
-
|
34
|
-
def error(message = nil, ex = nil, data = nil, &block)
|
35
|
-
return true if level > ERROR
|
36
|
-
args = block ? yield : [message, ex, data]
|
37
|
-
add(ERROR, build_log(args))
|
38
|
-
end
|
39
|
-
|
40
|
-
def fatal(message = nil, ex = nil, data = nil, &block)
|
41
|
-
return true if level > FATAL
|
42
|
-
args = block ? yield : [message, ex, data]
|
43
|
-
add(FATAL, build_log(args))
|
44
|
-
end
|
45
|
-
|
46
|
-
def unknown(message = nil, ex = nil, data = nil, &block)
|
47
|
-
args = block ? yield : [message, ex, data]
|
48
|
-
add(UNKNOWN, build_log(args))
|
49
|
-
end
|
50
|
-
|
51
15
|
def self.broadcast(logger)
|
52
16
|
Module.new do |mdl|
|
53
17
|
::Logger::Severity.constants.each do |severity|
|
@@ -61,16 +25,22 @@ module Ougai
|
|
61
25
|
end
|
62
26
|
end
|
63
27
|
|
28
|
+
def chain(severity, args, fields)
|
29
|
+
write(severity, args, merge_fields(@with_fields, fields))
|
30
|
+
end
|
31
|
+
|
64
32
|
protected
|
65
33
|
|
34
|
+
def append(severity, args)
|
35
|
+
write(severity, args, @with_fields)
|
36
|
+
end
|
37
|
+
|
66
38
|
def create_formatter
|
67
39
|
Formatters::Bunyan.new
|
68
40
|
end
|
69
41
|
|
70
|
-
|
71
|
-
|
72
|
-
def build_log(args)
|
73
|
-
@with_fields.merge(to_item(args))
|
42
|
+
def write(severity, args, fields)
|
43
|
+
add(severity, merge_fields(fields, to_item(args)))
|
74
44
|
end
|
75
45
|
|
76
46
|
def to_item(args)
|
@@ -87,6 +57,8 @@ module Ougai
|
|
87
57
|
end
|
88
58
|
end
|
89
59
|
|
60
|
+
private
|
61
|
+
|
90
62
|
def create_item_with_1arg(msg)
|
91
63
|
item = {}
|
92
64
|
if msg.is_a?(Exception)
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Ougai
|
2
|
+
module Logging
|
3
|
+
attr_accessor :with_fields
|
4
|
+
|
5
|
+
def debug(message = nil, ex = nil, data = nil, &block)
|
6
|
+
return true if level > Logger::DEBUG
|
7
|
+
args = block ? yield : [message, ex, data]
|
8
|
+
append(Logger::DEBUG, args)
|
9
|
+
end
|
10
|
+
|
11
|
+
def info(message = nil, ex = nil, data = nil, &block)
|
12
|
+
return true if level > Logger::INFO
|
13
|
+
args = block ? yield : [message, ex, data]
|
14
|
+
append(Logger::INFO, args)
|
15
|
+
end
|
16
|
+
|
17
|
+
def warn(message = nil, ex = nil, data = nil, &block)
|
18
|
+
return true if level > Logger::WARN
|
19
|
+
args = block ? yield : [message, ex, data]
|
20
|
+
append(Logger::WARN, args)
|
21
|
+
end
|
22
|
+
|
23
|
+
def error(message = nil, ex = nil, data = nil, &block)
|
24
|
+
return true if level > Logger::ERROR
|
25
|
+
args = block ? yield : [message, ex, data]
|
26
|
+
append(Logger::ERROR, args)
|
27
|
+
end
|
28
|
+
|
29
|
+
def fatal(message = nil, ex = nil, data = nil, &block)
|
30
|
+
return true if level > Logger::FATAL
|
31
|
+
args = block ? yield : [message, ex, data]
|
32
|
+
append(Logger::FATAL, args)
|
33
|
+
end
|
34
|
+
|
35
|
+
def unknown(message = nil, ex = nil, data = nil, &block)
|
36
|
+
args = block ? yield : [message, ex, data]
|
37
|
+
append(Logger::UNKNOWN, args)
|
38
|
+
end
|
39
|
+
|
40
|
+
def child(fields = {})
|
41
|
+
ChildLogger.new(self, fields)
|
42
|
+
end
|
43
|
+
|
44
|
+
def chain(severity, args, fields)
|
45
|
+
raise NotImplementedError
|
46
|
+
end
|
47
|
+
|
48
|
+
protected
|
49
|
+
|
50
|
+
def append(severity, args)
|
51
|
+
raise NotImplementedError
|
52
|
+
end
|
53
|
+
|
54
|
+
def merge_fields(base_data, new_data)
|
55
|
+
base_data.merge(new_data) do |_, base_val, new_val|
|
56
|
+
if base_val.is_a?(Array) and new_val.is_a?(Array)
|
57
|
+
(base_val + new_val).uniq
|
58
|
+
else
|
59
|
+
new_val
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
data/lib/ougai/version.rb
CHANGED
@@ -0,0 +1,300 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'stringio'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
describe Ougai::ChildLogger do
|
6
|
+
let(:pid) { Process.pid }
|
7
|
+
|
8
|
+
matcher :be_log_message do |message, level|
|
9
|
+
match do |actual|
|
10
|
+
actual[:name] == 'rspec' \
|
11
|
+
&& actual[:msg] == message \
|
12
|
+
&& actual[:level] == level \
|
13
|
+
&& actual[:pid] == pid \
|
14
|
+
&& actual[:v] == 0
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:io) { StringIO.new }
|
19
|
+
let(:parent_logger) { Ougai::Logger.new(io) }
|
20
|
+
|
21
|
+
let(:items) do
|
22
|
+
io.rewind
|
23
|
+
io.readlines.map do |line|
|
24
|
+
JSON.parse(line.chomp, symbolize_names: true)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
let(:item) {
|
29
|
+
items[0]
|
30
|
+
}
|
31
|
+
|
32
|
+
describe '#level propagated from parent one' do
|
33
|
+
let(:logger) { parent_logger.child }
|
34
|
+
|
35
|
+
context 'DEBUG' do
|
36
|
+
let(:log_msg) { 'log message' }
|
37
|
+
before { parent_logger.level = Logger::DEBUG }
|
38
|
+
|
39
|
+
it 'outputs debug message' do
|
40
|
+
logger.debug(log_msg)
|
41
|
+
expect(item).to be_log_message(log_msg, 20)
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'outputs info message' do
|
45
|
+
logger.info(log_msg)
|
46
|
+
expect(item).to be_log_message(log_msg, 30)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
context 'INFO' do
|
51
|
+
let(:log_msg) { 'log message' }
|
52
|
+
before { parent_logger.level = Logger::INFO }
|
53
|
+
|
54
|
+
it 'does not output debug message' do
|
55
|
+
logger.debug(log_msg)
|
56
|
+
expect(item).to be_nil
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'outputs info message' do
|
60
|
+
logger.info(log_msg)
|
61
|
+
expect(item).to be_log_message(log_msg, 30)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'outputs warning message' do
|
65
|
+
logger.warn(log_msg)
|
66
|
+
expect(item).to be_log_message(log_msg, 40)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
context 'WARN' do
|
71
|
+
let(:log_msg) { 'log message' }
|
72
|
+
before { parent_logger.level = Logger::WARN }
|
73
|
+
|
74
|
+
it 'does not output info message' do
|
75
|
+
logger.info(log_msg)
|
76
|
+
expect(item).to be_nil
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'outputs warning message' do
|
80
|
+
logger.warn(log_msg)
|
81
|
+
expect(item).to be_log_message(log_msg, 40)
|
82
|
+
end
|
83
|
+
|
84
|
+
it 'outputs error message' do
|
85
|
+
logger.error(log_msg)
|
86
|
+
expect(item).to be_log_message(log_msg, 50)
|
87
|
+
end
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'ERROR' do
|
91
|
+
let(:log_msg) { 'log message' }
|
92
|
+
before { parent_logger.level = Logger::ERROR }
|
93
|
+
|
94
|
+
it 'does not output warning message' do
|
95
|
+
logger.warn(log_msg)
|
96
|
+
expect(item).to be_nil
|
97
|
+
end
|
98
|
+
|
99
|
+
it 'outputs error message' do
|
100
|
+
logger.error(log_msg)
|
101
|
+
expect(item).to be_log_message(log_msg, 50)
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'outputs fatal message' do
|
105
|
+
logger.fatal(log_msg)
|
106
|
+
expect(item).to be_log_message(log_msg, 60)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
context 'FATAL' do
|
111
|
+
let(:log_msg) { 'log message' }
|
112
|
+
before { parent_logger.level = Logger::FATAL }
|
113
|
+
|
114
|
+
it 'does not output error message' do
|
115
|
+
logger.error(log_msg)
|
116
|
+
expect(item).to be_nil
|
117
|
+
end
|
118
|
+
|
119
|
+
it 'outputs fatal message' do
|
120
|
+
logger.fatal(log_msg)
|
121
|
+
expect(item).to be_log_message(log_msg, 60)
|
122
|
+
end
|
123
|
+
|
124
|
+
it 'outputs unknown message' do
|
125
|
+
logger.unknown(log_msg)
|
126
|
+
expect(item).to be_log_message(log_msg, 70)
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
context 'UNKNOWN' do
|
131
|
+
let(:log_msg) { 'log message' }
|
132
|
+
before { parent_logger.level = Logger::UNKNOWN }
|
133
|
+
|
134
|
+
it 'does not output fatal message' do
|
135
|
+
logger.fatal(log_msg)
|
136
|
+
expect(item).to be_nil
|
137
|
+
end
|
138
|
+
|
139
|
+
it 'outputs unknown message' do
|
140
|
+
logger.unknown(log_msg)
|
141
|
+
expect(item).to be_log_message(log_msg, 70)
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
describe '#chain' do
|
147
|
+
let(:log_level) { 30 }
|
148
|
+
let(:log_msg) { 'log message' }
|
149
|
+
let(:parent_log_msg) { 'parent log message' }
|
150
|
+
|
151
|
+
context 'parent with fields, child with fields' do
|
152
|
+
before do
|
153
|
+
parent_logger.with_fields = { foo: 1, pos: 'parent' }
|
154
|
+
end
|
155
|
+
|
156
|
+
let(:logger) { parent_logger.child(bar: '1', pos: 'child') }
|
157
|
+
|
158
|
+
it 'outputs with merged parent and child fields' do
|
159
|
+
logger.info(log_msg)
|
160
|
+
parent_logger.info(parent_log_msg)
|
161
|
+
|
162
|
+
expect(items[0]).to be_log_message(log_msg, log_level)
|
163
|
+
expect(items[0]).to include(foo: 1, bar: '1', pos: 'child')
|
164
|
+
expect(items[1]).to be_log_message(parent_log_msg, log_level)
|
165
|
+
expect(items[1]).to include(foo: 1, pos: 'parent')
|
166
|
+
expect(items[1]).not_to include(:bar)
|
167
|
+
end
|
168
|
+
|
169
|
+
context 'after updating with_fieldses of parent and child' do
|
170
|
+
before do
|
171
|
+
parent_logger.with_fields = { foo: 11 }
|
172
|
+
logger.with_fields = { bar: '11' }
|
173
|
+
end
|
174
|
+
|
175
|
+
it 'outputs with child fields' do
|
176
|
+
logger.info(log_msg)
|
177
|
+
parent_logger.info(parent_log_msg)
|
178
|
+
|
179
|
+
expect(items[0]).to be_log_message(log_msg, log_level)
|
180
|
+
expect(items[0]).to include(foo: 11, bar: '11')
|
181
|
+
expect(items[0]).not_to include(:pos)
|
182
|
+
expect(items[1]).to be_log_message(parent_log_msg, log_level)
|
183
|
+
expect(items[1]).to include(foo: 11)
|
184
|
+
expect(items[1]).not_to include(:bar, :pos)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
context 'parent with fields, child without fields' do
|
190
|
+
before do
|
191
|
+
parent_logger.with_fields = { foo: 2, pos: 'parent' }
|
192
|
+
end
|
193
|
+
|
194
|
+
let(:logger) { parent_logger.child }
|
195
|
+
|
196
|
+
it 'output valid' do
|
197
|
+
logger.info(log_msg)
|
198
|
+
parent_logger.info(parent_log_msg)
|
199
|
+
|
200
|
+
expect(items[0]).to be_log_message(log_msg, log_level)
|
201
|
+
expect(items[0]).to include(foo: 2, pos: 'parent')
|
202
|
+
expect(items[1]).to be_log_message(parent_log_msg, log_level)
|
203
|
+
expect(items[1]).to include(foo: 2, pos: 'parent')
|
204
|
+
end
|
205
|
+
|
206
|
+
context 'after updating parent logger with_fields' do
|
207
|
+
before do
|
208
|
+
parent_logger.with_fields = { foo: 22 }
|
209
|
+
end
|
210
|
+
|
211
|
+
it 'output with new parent fields' do
|
212
|
+
logger.info(log_msg)
|
213
|
+
parent_logger.info(parent_log_msg)
|
214
|
+
|
215
|
+
expect(items[0]).to be_log_message(log_msg, log_level)
|
216
|
+
expect(items[0]).to include(foo: 22)
|
217
|
+
expect(items[0]).not_to include(:pos)
|
218
|
+
expect(items[1]).to be_log_message(parent_log_msg, log_level)
|
219
|
+
expect(items[1]).to include(foo: 22)
|
220
|
+
expect(items[1]).not_to include(:pos)
|
221
|
+
end
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
context 'parent without fields, child with fields' do
|
226
|
+
before do
|
227
|
+
parent_logger.with_fields = {}
|
228
|
+
end
|
229
|
+
|
230
|
+
let(:logger) { parent_logger.child(bar: '3', pos: 'child') }
|
231
|
+
|
232
|
+
it 'output valid' do
|
233
|
+
logger.info(log_msg)
|
234
|
+
parent_logger.info(parent_log_msg)
|
235
|
+
|
236
|
+
expect(items[0]).to be_log_message(log_msg, log_level)
|
237
|
+
expect(items[0]).to include(bar: '3', pos: 'child')
|
238
|
+
expect(items[1]).to be_log_message(parent_log_msg, log_level)
|
239
|
+
expect(items[1]).not_to include(:bar, :pos)
|
240
|
+
end
|
241
|
+
|
242
|
+
context 'after updating child logger with_fields' do
|
243
|
+
before do
|
244
|
+
logger.with_fields = { bar: '33' }
|
245
|
+
end
|
246
|
+
|
247
|
+
it 'output valid' do
|
248
|
+
logger.info(log_msg)
|
249
|
+
parent_logger.info(parent_log_msg)
|
250
|
+
|
251
|
+
expect(items[0]).to be_log_message(log_msg, log_level)
|
252
|
+
expect(items[0]).to include(bar: '33')
|
253
|
+
expect(items[0]).not_to include(:pos)
|
254
|
+
expect(items[1]).to be_log_message(parent_log_msg, log_level)
|
255
|
+
expect(items[1]).not_to include(:bar, :pos)
|
256
|
+
end
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
context 'grandchild logger' do
|
261
|
+
before do
|
262
|
+
parent_logger.with_fields = { tag: 'parent', tags: ['parent'] }
|
263
|
+
end
|
264
|
+
|
265
|
+
let(:logger) { parent_logger.child(tag: 'child', tags: ['child']) }
|
266
|
+
let(:grand_logger) { logger.child(tag: 'grandchild', tags: ['grandchild']) }
|
267
|
+
|
268
|
+
it 'outputs with all merged fields' do
|
269
|
+
grand_logger.info('Hi', foo: 3)
|
270
|
+
logger.info(log_msg, foo: 2)
|
271
|
+
parent_logger.info(parent_log_msg, foo: 10)
|
272
|
+
parent_logger.info('Good evening!', foo: 11)
|
273
|
+
|
274
|
+
expect(items[0]).to be_log_message('Hi', log_level)
|
275
|
+
expect(items[0]).to include(tag: 'grandchild', tags: ['parent', 'child', 'grandchild'], foo: 3)
|
276
|
+
|
277
|
+
expect(items[1]).to be_log_message(log_msg, log_level)
|
278
|
+
expect(items[1]).to include(tag: 'child', tags: ['parent', 'child'], foo: 2)
|
279
|
+
|
280
|
+
expect(items[2]).to be_log_message(parent_log_msg, log_level)
|
281
|
+
expect(items[2]).to include(tag: 'parent', tags: ['parent'], foo: 10)
|
282
|
+
expect(items[3]).to be_log_message('Good evening!', log_level)
|
283
|
+
expect(items[3]).to include(tag: 'parent', tags: ['parent'], foo: 11)
|
284
|
+
end
|
285
|
+
|
286
|
+
context 'after updating child logger with_fields' do
|
287
|
+
before do
|
288
|
+
logger.with_fields = { bar: '33' }
|
289
|
+
end
|
290
|
+
|
291
|
+
it 'outputs with child fields' do
|
292
|
+
logger.info(log_msg)
|
293
|
+
expect(items[0]).to be_log_message(log_msg, log_level)
|
294
|
+
expect(items[0]).to include(bar: '33')
|
295
|
+
expect(items[0]).not_to include(:pos)
|
296
|
+
end
|
297
|
+
end
|
298
|
+
end
|
299
|
+
end
|
300
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Ougai::Logging do
|
4
|
+
describe '#merge_fields' do
|
5
|
+
let(:target) { m = described_class; Class.new{ include m }.new }
|
6
|
+
|
7
|
+
it 'merges with unique elements in array' do
|
8
|
+
result = nil
|
9
|
+
target.instance_eval do
|
10
|
+
result = merge_fields({ foo: [1, 2], bar: 'base', baz: ['A'] },
|
11
|
+
{ foo: [2, 3], bar: 'over', baz: ['B'] })
|
12
|
+
end
|
13
|
+
expect(result[:foo]).to eq([1, 2, 3])
|
14
|
+
expect(result[:bar]).to eq('over')
|
15
|
+
expect(result[:baz]).to eq(['A', 'B'])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ougai
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Toshimitsu Takahashi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -68,14 +68,18 @@ files:
|
|
68
68
|
- README.md
|
69
69
|
- Rakefile
|
70
70
|
- lib/ougai.rb
|
71
|
+
- lib/ougai/child_logger.rb
|
71
72
|
- lib/ougai/formatters/base.rb
|
72
73
|
- lib/ougai/formatters/bunyan.rb
|
73
74
|
- lib/ougai/formatters/readable.rb
|
74
75
|
- lib/ougai/logger.rb
|
76
|
+
- lib/ougai/logging.rb
|
75
77
|
- lib/ougai/version.rb
|
78
|
+
- spec/child_logger_spec.rb
|
76
79
|
- spec/formatters/base_spec.rb
|
77
80
|
- spec/formatters/readable_spec.rb
|
78
81
|
- spec/logger_spec.rb
|
82
|
+
- spec/logging_spec.rb
|
79
83
|
- spec/ougai_spec.rb
|
80
84
|
- spec/spec_helper.rb
|
81
85
|
homepage: https://github.com/tilfin/ougai
|
@@ -105,6 +109,8 @@ summary: JSON logger compatible with node-bunyan is capable of handling data eas
|
|
105
109
|
test_files:
|
106
110
|
- spec/formatters/base_spec.rb
|
107
111
|
- spec/formatters/readable_spec.rb
|
112
|
+
- spec/child_logger_spec.rb
|
113
|
+
- spec/logging_spec.rb
|
108
114
|
- spec/logger_spec.rb
|
109
115
|
- spec/ougai_spec.rb
|
110
116
|
- spec/spec_helper.rb
|