ougai 1.2.0 → 1.3.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
  SHA1:
3
- metadata.gz: 457d3322926c875ce7c6b72b7ae0f192a96788fe
4
- data.tar.gz: eb2e3121f6a0b6367d7608b72344ca27ecb764ed
3
+ metadata.gz: 0235a013e7e1d174d71adb866072ce73243cb8a8
4
+ data.tar.gz: ffde73e617129cf7287abfd53cbd5f151e166816
5
5
  SHA512:
6
- metadata.gz: eb7ebaf9a4b3bd092410aef5778152f378e53a2a059cb450170e536bea78c6a64919be9325cc285e6b9978dfbf51d551e21155d544c492f9ea58904652acb5e6
7
- data.tar.gz: 0f0d12daf3ad7959e8fb7c65599d07af6b427bdd8be262904b87781d6a439a9ba453a738387a496ee3bf677471609de9e6ebe64f7ea125dd957d1964c150a649
6
+ metadata.gz: be64d5eb15dca49f85a323b2c3fac463d83a42dd3f5f0bca6d318ca27cd8646e74dd3e3d658d3248469ccf4e6320c39512a390a91ca92d8a46dde3ab1f7f4c3a
7
+ data.tar.gz: a634e9fa73595c01748390bb6043e220c8f0b65cc052202320cf6fa31ea4b3be0984c623171afc46ea72e227d3f32bceb770b3baf07d8f0421e54067ac2326f8
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ougai (1.2.0)
4
+ ougai (1.3.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
data/README.md CHANGED
@@ -214,6 +214,28 @@ gc_logger.debug('something detail', age: 34, weight: 72)
214
214
 
215
215
  If any field exists in both parent log and child log, the parent value is overridden or merged by child value.
216
216
 
217
+ ### Hook before logging
218
+
219
+ Setting `before_log` of logger or child an *lambda* with `data` field, a process can be run before log each output.
220
+
221
+ * Adding variable data (like Thread ID) to logging data can be defined in common.
222
+ * Returning `false` in *lambda*, the log is cancelled and does not output.
223
+ * The *before_log* of child logger is run ahead of the parent logger's.
224
+
225
+ ```ruby
226
+ logger.before_log = lambda do |data|
227
+ data[:thread_id] = Thread.current.object_id.to_s(36)
228
+ end
229
+
230
+ logger.debug('on main thread')
231
+ Thread.new { logger.debug('on another thread') }
232
+ ```
233
+
234
+ ```json
235
+ {"name":"main","hostname":"mint","pid":13975,"level":20,"time":"2017-08-06T15:35:53.435+09:00","v":0,"msg":"on main thread","thread_id":"gqe0ava6c"}
236
+ {"name":"main","hostname":"mint","pid":13975,"level":20,"time":"2017-08-06T15:35:53.435+09:00","v":0,"msg":"on another thread","thread_id":"gqe0cb14g"}
237
+ ```
238
+
217
239
  ## View log by node-bunyan
218
240
 
219
241
  Install [bunyan](https://github.com/trentm/node-bunyan) via NPM
@@ -11,14 +11,16 @@ module Ougai
11
11
  @parent.level
12
12
  end
13
13
 
14
- def chain(severity, args, fields)
15
- @parent.chain(severity, args, merge_fields(@with_fields, fields))
14
+ def chain(severity, args, fields, hooks)
15
+ hooks.push(@before_log) if @before_log
16
+ @parent.chain(severity, args, merge_fields(@with_fields, fields), hooks)
16
17
  end
17
18
 
18
19
  protected
19
20
 
20
21
  def append(severity, args)
21
- @parent.chain(severity, args, @with_fields)
22
+ hooks = @before_log ? [@before_log] : []
23
+ @parent.chain(severity, args, @with_fields, hooks)
22
24
  end
23
25
  end
24
26
  end
data/lib/ougai/logger.rb CHANGED
@@ -25,22 +25,28 @@ module Ougai
25
25
  end
26
26
  end
27
27
 
28
- def chain(severity, args, fields)
29
- write(severity, args, merge_fields(@with_fields, fields))
28
+ def chain(severity, args, fields, hooks)
29
+ hooks.push(@before_log) if @before_log
30
+ write(severity, args, merge_fields(@with_fields, fields), hooks)
30
31
  end
31
32
 
32
33
  protected
33
34
 
34
35
  def append(severity, args)
35
- write(severity, args, @with_fields)
36
+ hooks = @before_log ? [@before_log] : []
37
+ write(severity, args, @with_fields, hooks)
36
38
  end
37
39
 
38
40
  def create_formatter
39
41
  Formatters::Bunyan.new
40
42
  end
41
43
 
42
- def write(severity, args, fields)
43
- add(severity, merge_fields(fields, to_item(args)))
44
+ def write(severity, args, fields, hooks)
45
+ data = merge_fields(fields, to_item(args))
46
+ hooks.each do |hook|
47
+ return false if hook.call(data) == false
48
+ end
49
+ add(severity, data)
44
50
  end
45
51
 
46
52
  def to_item(args)
data/lib/ougai/logging.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  module Ougai
2
2
  module Logging
3
3
  attr_accessor :with_fields
4
+ attr_writer :before_log
4
5
 
5
6
  def debug(message = nil, ex = nil, data = nil, &block)
6
7
  return true if level > Logger::DEBUG
@@ -41,7 +42,7 @@ module Ougai
41
42
  ChildLogger.new(self, fields)
42
43
  end
43
44
 
44
- def chain(severity, args, fields)
45
+ def chain(_severity, _args, _fields, _hooks)
45
46
  raise NotImplementedError
46
47
  end
47
48
 
data/lib/ougai/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ougai
2
- VERSION = "1.2.0"
2
+ VERSION = "1.3.0"
3
3
  end
@@ -297,4 +297,60 @@ describe Ougai::ChildLogger do
297
297
  end
298
298
  end
299
299
  end
300
+
301
+ describe '#before_log' do
302
+ let(:logger) { parent_logger.child }
303
+ let(:log_msg) { 'before_log test' }
304
+
305
+ before do
306
+ parent_logger.level = Logger::INFO
307
+ end
308
+
309
+ context 'child logger to be set before_log' do
310
+ before do
311
+ logger.before_log = lambda do |data|
312
+ data[:context_id] = 123
313
+ end
314
+ end
315
+
316
+ it 'outputs the field to be added in before_log' do
317
+ logger.info(log_msg)
318
+ expect(item).to be_log_message(log_msg, 30)
319
+ expect(item).to include(context_id: 123)
320
+ end
321
+ end
322
+
323
+ context 'parent logger to be set before_log' do
324
+ before do
325
+ parent_logger.before_log = lambda do |data|
326
+ data[:context_id] = 12345
327
+ end
328
+ end
329
+
330
+ it 'outputs the field to be added in before_log' do
331
+ logger.info(log_msg)
332
+ expect(item).to be_log_message(log_msg, 30)
333
+ expect(item).to include(context_id: 12345)
334
+ end
335
+ end
336
+
337
+ context 'both child logger and parent logger to be set before_log' do
338
+ before do
339
+ logger.before_log = lambda do |data|
340
+ data[:context_id] = 67890
341
+ data[:context_name] = 'sub'
342
+ end
343
+ parent_logger.before_log = lambda do |data|
344
+ data[:context_id] = 12345
345
+ end
346
+ end
347
+
348
+ it 'outputs the fields to be added in each before_log' do
349
+ logger.info(log_msg)
350
+ expect(item).to be_log_message(log_msg, 30)
351
+ expect(item).to include(context_id: 12345) # parent
352
+ expect(item).to include(context_name: 'sub') # child
353
+ end
354
+ end
355
+ end
300
356
  end
data/spec/logger_spec.rb CHANGED
@@ -483,4 +483,37 @@ describe Ougai::Logger do
483
483
  end
484
484
  end
485
485
  end
486
+
487
+ describe '#before_log' do
488
+ let(:log_msg) { 'before_log test' }
489
+
490
+ context 'set context data' do
491
+ before do
492
+ logger.level = Logger::INFO
493
+ logger.before_log = lambda do |data|
494
+ data[:context_id] = 123
495
+ end
496
+ end
497
+
498
+ it 'outputs with context data' do
499
+ logger.info(log_msg)
500
+ expect(item).to be_log_message(log_msg, 30)
501
+ expect(item).to include(context_id: 123)
502
+ end
503
+ end
504
+
505
+ context 'cancelling log' do
506
+ before do
507
+ logger.level = Logger::INFO
508
+ logger.before_log = lambda do |data|
509
+ false
510
+ end
511
+ end
512
+
513
+ it 'outputs none' do
514
+ logger.info(log_msg)
515
+ expect(item).to be_nil
516
+ end
517
+ end
518
+ end
486
519
  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.2.0
4
+ version: 1.3.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-08-01 00:00:00.000000000 Z
11
+ date: 2017-08-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler