ougai 1.6.1 → 1.6.3

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: f97b8ee5e0ea8a1a8447617bc897d7f4d74374ef
4
- data.tar.gz: 6378c1a5f851471e1e57fd61595a9108d1cdfda9
3
+ metadata.gz: 3a3a13441e1374f9f227801a4fa3b01992e05c7f
4
+ data.tar.gz: 0e2a39093027b4a0ad7c82b2626460ae07225e1a
5
5
  SHA512:
6
- metadata.gz: 7ef907639cb3aed26f0a363e6728e7a893c767d05a5e31dddb042c10c43996ef5ed1b5b1763843924ab10b2895e59db03e306bbdbd4881833c18689e4a7e0d88
7
- data.tar.gz: b547e81ff137f3c877f1a789a22318b1172fa5743f24741f3ea2470309c9e8d0cc5f5d0f0257af74da5c5dd2a3451b223feec2296148db7bf3ce3eb2e705dd85
6
+ metadata.gz: 62426a676338318a26d1c37e72bd9f5221d8f980fc810bb939ac6a19631b77c9a44193f43dc21e31f362e62194f3ee99e4f2fc15e54c9781336beaea571f7802
7
+ data.tar.gz: 2b027dbbc7bbeff72e7069e0cdf899609a3ca45ec0e0c241349af5025c7b6f2e4e34b93a1401a3edd1677bfcd6c69f1aadc63bfca78c8e4a87090e6f2ab6137f
data/Gemfile CHANGED
@@ -6,4 +6,5 @@ gemspec
6
6
  group :test do
7
7
  gem 'awesome_print'
8
8
  gem 'simplecov', require: false
9
+ gem 'yard'
9
10
  end
@@ -0,0 +1,49 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ ougai (1.6.3)
5
+ oj (~> 3.4)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ awesome_print (1.8.0)
11
+ diff-lcs (1.2.5)
12
+ docile (1.1.5)
13
+ json (2.1.0)
14
+ oj (3.4.0)
15
+ rake (10.5.0)
16
+ rspec (3.5.0)
17
+ rspec-core (~> 3.5.0)
18
+ rspec-expectations (~> 3.5.0)
19
+ rspec-mocks (~> 3.5.0)
20
+ rspec-core (3.5.4)
21
+ rspec-support (~> 3.5.0)
22
+ rspec-expectations (3.5.0)
23
+ diff-lcs (>= 1.2.0, < 2.0)
24
+ rspec-support (~> 3.5.0)
25
+ rspec-mocks (3.5.0)
26
+ diff-lcs (>= 1.2.0, < 2.0)
27
+ rspec-support (~> 3.5.0)
28
+ rspec-support (3.5.0)
29
+ simplecov (0.14.1)
30
+ docile (~> 1.1.0)
31
+ json (>= 1.8, < 3)
32
+ simplecov-html (~> 0.10.0)
33
+ simplecov-html (0.10.1)
34
+ yard (0.9.12)
35
+
36
+ PLATFORMS
37
+ ruby
38
+
39
+ DEPENDENCIES
40
+ awesome_print
41
+ bundler (~> 1.11)
42
+ ougai!
43
+ rake (~> 10.0)
44
+ rspec (~> 3.0)
45
+ simplecov
46
+ yard
47
+
48
+ BUNDLED WITH
49
+ 1.16.0
data/README.md CHANGED
@@ -2,12 +2,13 @@ Ougai
2
2
  =====
3
3
 
4
4
  [![Gem Version](https://badge.fury.io/rb/ougai.svg)](https://badge.fury.io/rb/ougai)
5
+ [![document](https://img.shields.io/badge/document-1.6.3-green.svg)](http://www.rubydoc.info/gems/ougai/1.6.3/)
5
6
  [![Build Status](https://travis-ci.org/tilfin/ougai.svg?branch=master)](https://travis-ci.org/tilfin/ougai)
6
7
  [![Code Climate](https://codeclimate.com/github/tilfin/ougai/badges/gpa.svg)](https://codeclimate.com/github/tilfin/ougai)
7
8
  [![Test Coverage](https://codeclimate.com/github/tilfin/ougai/badges/coverage.svg)](https://codeclimate.com/github/tilfin/ougai/coverage)
8
9
 
9
10
  A structured logging system is capable of handling a message, structured data or an exception easily.
10
- It has JSON formatter compatible with [Bunyan](https://github.com/trentm/node-bunyan) for Node.js and
11
+ It has JSON formatters compatible with [Bunyan](https://github.com/trentm/node-bunyan) or [pino](https://github.com/pinojs/pino) for Node.js and
11
12
  human readable formatter with [Awesome Print](https://github.com/awesome-print/awesome_print) for console.
12
13
 
13
14
  ## Installation
@@ -293,18 +294,18 @@ logger.warn('Ignored something.')
293
294
  ```
294
295
 
295
296
 
296
- ## View logs with node-bunyan
297
+ ## View pretty logs with node-bunyan or pino
297
298
 
298
- Install [bunyan](https://github.com/trentm/node-bunyan) via npm
299
+ Install [bunyan](https://github.com/trentm/node-bunyan) or [pino](https://github.com/pinojs/pino) via npm
299
300
 
300
301
  ```
301
302
  $ npm install -g bunyan
302
303
  ```
303
304
 
304
- Pass a log file to command `bunyan`
305
+ Pipe a log file to command
305
306
 
306
307
  ```
307
- $ bunyan output.log
308
+ $ cat output.log | bunyan
308
309
  [2016-10-16T22:26:48.835+09:00] INFO: main/14607 on mint: Info message!
309
310
  [2016-10-16T22:26:48.836+09:00] DEBUG: main/14607 on mint: Debugging (data_id=1, data_flag=true)
310
311
  [2016-10-16T22:26:48.836+09:00] DEBUG: main/14607 on mint: Debug!
@@ -319,6 +320,7 @@ $ bunyan output.log
319
320
  main.rb:18:in `<main>'
320
321
  ```
321
322
 
323
+ If you use *Ougai::Formatters::Pino*, you can use command [pino](https://github.com/pinojs/pino) as well as [bunyan](https://github.com/trentm/node-bunyan).
322
324
 
323
325
  ## Use human Readable formatter for console
324
326
 
data/Rakefile CHANGED
@@ -1,6 +1,17 @@
1
1
  require "bundler/gem_tasks"
2
2
  require "rspec/core/rake_task"
3
+ require 'yard'
4
+ require 'yard/rake/yardoc_task'
3
5
 
4
6
  RSpec::Core::RakeTask.new(:spec)
5
7
 
6
8
  task :default => :spec
9
+
10
+ FILES = ['lib/**/*.rb']
11
+ OPTIONS = ['--debug', '--verbose']
12
+
13
+ YARD::Rake::YardocTask.new do |t|
14
+ t.files = FILES
15
+ t.options = []
16
+ t.options << OPTIONS if $trace
17
+ end
@@ -2,7 +2,9 @@ require 'logger'
2
2
  require 'ougai/version'
3
3
  require 'ougai/logging'
4
4
  require 'ougai/formatters/base'
5
+ require 'ougai/formatters/for_json'
5
6
  require 'ougai/formatters/bunyan'
6
7
  require 'ougai/formatters/readable'
8
+ require 'ougai/formatters/pino'
7
9
  require 'ougai/child_logger'
8
10
  require 'ougai/logger'
@@ -13,12 +13,19 @@ module Ougai
13
13
  attr_accessor :serialize_backtrace
14
14
  attr_reader :app_name, :hostname
15
15
 
16
- def initialize(app_name = nil, hostname = nil)
16
+ # Intialize a formatter
17
+ # @param [String] app_name application name
18
+ # @param [String] hostname hostname
19
+ # @param [Hash] opts the initial values of attributes
20
+ # @option opts [String] :trace_indent (2) the value of trace_indent attribute
21
+ # @option opts [String] :trace_max_lines (100) the value of trace_max_lines attribute
22
+ # @option opts [String] :serialize_backtrace (true) the value of serialize_backtrace attribute
23
+ def initialize(app_name = nil, hostname = nil, opts = {})
17
24
  @app_name = app_name || File.basename($0, ".rb")
18
25
  @hostname = hostname || Socket.gethostname.force_encoding('UTF-8')
19
- @trace_indent = 2
20
- @trace_max_lines = 100
21
- @serialize_backtrace = true
26
+ @trace_indent = opts.fetch(:trace_indent, 2)
27
+ @trace_max_lines = opts.fetch(:trace_max_lines, 100)
28
+ @serialize_backtrace = opts.fetch(:serialize_backtrace, true)
22
29
  self.datetime_format = nil
23
30
  end
24
31
 
@@ -63,6 +70,16 @@ module Ougai
63
70
  f << (t.utc? ? 'Z' : '%:z')
64
71
  f.freeze
65
72
  end
73
+
74
+ def self.parse_new_params(args)
75
+ idx = args.index {|i| i.is_a?(Hash) }
76
+ return args if idx == 2
77
+ opts = args[idx]
78
+ app_name = opts.delete(:app_name)
79
+ hostname = opts.delete(:hostname)
80
+ app_name ||= args[0] if idx > 0
81
+ [app_name, hostname, opts]
82
+ end
66
83
  end
67
84
  end
68
85
  end
@@ -4,15 +4,27 @@ require 'oj'
4
4
  module Ougai
5
5
  module Formatters
6
6
  # A JSON formatter compatible with node-bunyan
7
- # @attr [Boolean] jsonize Whether log should converts JSON (by default this is on).
8
- # @attr [Boolean] with_newline Whether tailing NL should be appended (by default this is on).
7
+ # @attr [Boolean] jsonize Whether log should converts JSON
8
+ # @attr [Boolean] with_newline Whether tailing NL should be appended
9
9
  class Bunyan < Base
10
+ include ForJson
11
+
10
12
  attr_accessor :jsonize, :with_newline
11
13
 
12
- def initialize(*args)
13
- super(*args)
14
- @jsonize = true
15
- @with_newline = true
14
+ # Intialize a formatter
15
+ # @param [String] app_name application name (execution program name if nil)
16
+ # @param [String] hostname hostname (hostname if nil)
17
+ # @param [Hash] opts the initial values of attributes
18
+ # @option opts [String] :trace_indent (2) the value of trace_indent attribute
19
+ # @option opts [String] :trace_max_lines (100) the value of trace_max_lines attribute
20
+ # @option opts [String] :serialize_backtrace (true) the value of serialize_backtrace attribute
21
+ # @option opts [String] :jsonize (true) the value of jsonize attribute
22
+ # @option opts [String] :with_newline (true) the value of with_newline attribute
23
+ def initialize(app_name = nil, hostname = nil, opts = {})
24
+ aname, hname, opts = Base.parse_new_params([app_name, hostname, opts])
25
+ super(aname, hname, opts)
26
+ @jsonize = opts.fetch(:jsonize, true)
27
+ @with_newline = opts.fetch(:with_newline, true)
16
28
  end
17
29
 
18
30
  def _call(severity, time, progname, data)
@@ -26,25 +38,6 @@ module Ougai
26
38
  }.merge(data))
27
39
  end
28
40
 
29
- def to_level(severity)
30
- case severity
31
- when 'TRACE'
32
- 10
33
- when 'DEBUG'
34
- 20
35
- when 'INFO'
36
- 30
37
- when 'WARN'
38
- 40
39
- when 'ERROR'
40
- 50
41
- when 'FATAL'
42
- 60
43
- else
44
- 70
45
- end
46
- end
47
-
48
41
  private
49
42
 
50
43
  OJ_OPTIONS = { mode: :custom, time_format: :xmlschema,
@@ -0,0 +1,23 @@
1
+ module Ougai
2
+ # The features for JSON
3
+ module Formatters::ForJson
4
+ def to_level(severity)
5
+ case severity
6
+ when 'TRACE'
7
+ 10
8
+ when 'DEBUG'
9
+ 20
10
+ when 'INFO'
11
+ 30
12
+ when 'WARN'
13
+ 40
14
+ when 'ERROR'
15
+ 50
16
+ when 'FATAL'
17
+ 60
18
+ else
19
+ 70
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,73 @@
1
+ require 'ougai/formatters/base'
2
+ require 'oj'
3
+
4
+ module Ougai
5
+ module Formatters
6
+ # A JSON formatter compatible with pino
7
+ # @attr [Boolean] jsonize Whether log should converts JSON
8
+ # @attr [Boolean] with_newline Whether tailing NL should be appended
9
+ class Pino < Base
10
+ include ForJson
11
+
12
+ attr_accessor :jsonize, :with_newline
13
+
14
+ # Intialize a formatter
15
+ # @param [String] app_name application name (execution program name if nil)
16
+ # @param [String] hostname hostname (hostname if nil)
17
+ # @param [Hash] opts the initial values of attributes
18
+ # @option opts [String] :trace_indent (4) the value of trace_indent attribute
19
+ # @option opts [String] :trace_max_lines (100) the value of trace_max_lines attribute
20
+ # @option opts [String] :serialize_backtrace (true) the value of serialize_backtrace attribute
21
+ # @option opts [String] :jsonize (true) the value of jsonize attribute
22
+ # @option opts [String] :with_newline (true) the value of with_newline attribute
23
+ def initialize(app_name = nil, hostname = nil, opts = {})
24
+ aname, hname, opts = Base.parse_new_params([app_name, hostname, opts])
25
+ super(aname, hname, opts)
26
+ @jsonize = opts.fetch(:jsonize, true)
27
+ @with_newline = opts.fetch(:with_newline, true)
28
+ @trace_indent = opts.fetch(:trace_indent, 4)
29
+ @serialize_backtrace = true
30
+ end
31
+
32
+ def datetime_format=(val)
33
+ raise NotImplementedError, 'Not support datetime_format attribute' unless val.nil?
34
+ end
35
+
36
+ def _call(severity, time, progname, data)
37
+ flat_err(data)
38
+ dump({
39
+ name: progname || @app_name,
40
+ hostname: @hostname,
41
+ pid: $$,
42
+ level: to_level(severity),
43
+ time: time,
44
+ v: 1
45
+ }.merge(data))
46
+ end
47
+
48
+ private
49
+
50
+ def flat_err(data)
51
+ return unless data.key?(:err)
52
+ err = data.delete(:err)
53
+ msg = err[:message]
54
+ data[:type] ||= 'Error'
55
+ data[:msg] ||= msg
56
+ stack = "#{err[:name]}: #{msg}"
57
+ stack += "\n" + (" " * @trace_indent) + err[:stack] if err.key?(:stack)
58
+ data[:stack] ||= stack
59
+ end
60
+
61
+ OJ_OPTIONS = { mode: :custom, time_format: :xmlschema,
62
+ use_as_json: true, use_to_hash: true, use_to_json: true }
63
+
64
+ def dump(data)
65
+ return data unless @jsonize
66
+ data[:time] = data[:time].to_i * 1000
67
+ str = Oj.dump(data, OJ_OPTIONS)
68
+ str << "\n" if @with_newline
69
+ str
70
+ end
71
+ end
72
+ end
73
+ end
@@ -3,16 +3,25 @@ require 'ougai/formatters/base'
3
3
  module Ougai
4
4
  module Formatters
5
5
  # A human readble formatter with awesome_print
6
- # @attr [Boolean] plain Whether log should be plain not colorized (by default this is off).
7
- # @attr [Fixnum] trace_indent The indent space size (by default this is 4).
8
- # @attr [Array<String, Symbol>] excluded_fields The fields excluded from all logs.
6
+ # @attr [Boolean] plain Whether log should be plain not colorized.
7
+ # @attr [Array<String, Symbol>] excluded_fields The fields excluded from all logs
9
8
  class Readable < Base
10
- attr_accessor :plain, :trace_indent, :excluded_fields
9
+ attr_accessor :plain, :excluded_fields
11
10
 
12
- def initialize(opts = {})
13
- super(opts[:app_name], opts[:hostname])
14
- @trace_indent = opts[:trace_indent] || 4
15
- @plain = opts[:plain] || false
11
+ # Intialize a formatter
12
+ # @param [String] app_name application name (execution program name if nil)
13
+ # @param [String] hostname hostname (hostname if nil)
14
+ # @param [Hash] opts the initial values of attributes
15
+ # @option opts [String] :trace_indent (4) the value of trace_indent attribute
16
+ # @option opts [String] :trace_max_lines (100) the value of trace_max_lines attribute
17
+ # @option opts [String] :serialize_backtrace (true) the value of serialize_backtrace attribute
18
+ # @option opts [String] :plain (false) the value of plain attribute
19
+ # @option opts [String] :excluded_fields ([]) the value of excluded_fields attribute
20
+ def initialize(app_name = nil, hostname = nil, opts = {})
21
+ aname, hname, opts = Base.parse_new_params([app_name, hostname, opts])
22
+ super(aname, hname, opts)
23
+ @trace_indent = opts.fetch(:trace_indent, 4)
24
+ @plain = opts.fetch(:plain, false)
16
25
  @excluded_fields = opts[:excluded_fields] || []
17
26
  @serialize_backtrace = true
18
27
  load_dependent
@@ -1,3 +1,3 @@
1
1
  module Ougai
2
- VERSION = '1.6.1'
2
+ VERSION = '1.6.3'
3
3
  end
@@ -0,0 +1,142 @@
1
+ require 'spec_helper'
2
+
3
+ describe Ougai::Formatters::Pino do
4
+ let(:data) do
5
+ {
6
+ msg: 'Log Message!',
7
+ status: 200,
8
+ method: 'GET',
9
+ path: '/'
10
+ }
11
+ end
12
+
13
+ let(:err) do
14
+ {
15
+ name: 'DummyError',
16
+ message: 'it is dummy.',
17
+ stack: "error1.rb\n error2.rb"
18
+ }
19
+ end
20
+
21
+ let(:formatter) { described_class.new }
22
+
23
+ context '#initialize' do
24
+ let(:appname) { 'dummy app name' }
25
+
26
+ it 'suceeds with arguments' do
27
+ fmt = described_class.new(appname)
28
+ expect(fmt.app_name).to eq(appname)
29
+ end
30
+ end
31
+
32
+ context 'jsonize is true and with_newline is true' do
33
+ subject { formatter.call('DEBUG', Time.now, nil, data) }
34
+
35
+ it 'includes valid strings' do
36
+ expect(subject).to end_with("\n")
37
+ result = JSON.parse(subject.chomp, symbolize_names: true)
38
+ expect(result).to include(data.merge(level: 20))
39
+ expect(result[:time]).to be > 1518710101026
40
+ end
41
+ end
42
+
43
+ context 'jsonize is false' do
44
+ before do
45
+ formatter.jsonize = false
46
+ end
47
+
48
+ context 'when severity is TRACE' do
49
+ subject { formatter.call('TRACE', Time.now, nil, data) }
50
+
51
+ it 'includes valid hash' do
52
+ expect(subject).to include(data.merge(level: 10))
53
+ expect(subject[:time]).to be_an_instance_of(Time)
54
+ end
55
+ end
56
+
57
+ context 'when severity is DEBUG' do
58
+ subject { formatter.call('DEBUG', Time.now, nil, data) }
59
+
60
+ it 'includes valid hash' do
61
+ expect(subject).to include(data.merge(level: 20))
62
+ expect(subject[:time]).to be_an_instance_of(Time)
63
+ end
64
+ end
65
+
66
+ context 'when severity is INFO' do
67
+ subject { formatter.call('INFO', Time.now, nil, data) }
68
+
69
+ it 'includes valid hash' do
70
+ expect(subject).to include(data.merge(level: 30))
71
+ expect(subject[:time]).to be_an_instance_of(Time)
72
+ end
73
+ end
74
+
75
+ context 'when severity is WARN' do
76
+ subject { formatter.call('WARN', Time.now, nil, data) }
77
+
78
+ it 'includes valid hash' do
79
+ expect(subject).to include(data.merge(level: 40))
80
+ expect(subject[:time]).to be_an_instance_of(Time)
81
+ end
82
+ end
83
+
84
+ context 'when severity is ERROR' do
85
+ subject {
86
+ data.delete(:msg)
87
+ formatter.call('ERROR', Time.now, nil, data.merge({ err: err }))
88
+ }
89
+
90
+ it 'includes valid hash' do
91
+ expect(subject).to include({
92
+ level: 50, type: 'Error',
93
+ msg: 'it is dummy.',
94
+ stack: "DummyError: it is dummy.\n error1.rb\n error2.rb"
95
+ })
96
+ expect(subject[:time]).to be_an_instance_of(Time)
97
+ end
98
+ end
99
+
100
+ context 'when severity is FATAL' do
101
+ subject { formatter.call('FATAL', Time.now, nil, { msg: 'TheEnd', err: err }) }
102
+
103
+ it 'includes valid hash' do
104
+ expect(subject).to include({
105
+ level: 60, type: 'Error',
106
+ msg: 'TheEnd',
107
+ stack: "DummyError: it is dummy.\n error1.rb\n error2.rb"
108
+ })
109
+ expect(subject[:time]).to be_an_instance_of(Time)
110
+ end
111
+ end
112
+
113
+ context 'when severity is UNKNOWN' do
114
+ subject { formatter.call('ANY', Time.now, nil, { msg: 'unknown msg' }) }
115
+
116
+ it 'includes valid hash' do
117
+ expect(subject).to include(level: 70, msg: 'unknown msg')
118
+ end
119
+ end
120
+ end
121
+
122
+ context 'with_newline is false' do
123
+ before do
124
+ formatter.with_newline = false
125
+ end
126
+
127
+ subject { formatter.call('INFO', Time.now, nil, data) }
128
+
129
+ it 'includes valid strings' do
130
+ expect(subject).not_to end_with("\n")
131
+ result = JSON.parse(subject, symbolize_names: true)
132
+ expect(result).to include(data.merge(level: 30))
133
+ expect(result[:time]).to be > 1518710101026
134
+ end
135
+ end
136
+
137
+ describe '#datetime_format' do
138
+ it 'is not supported' do
139
+ expect{ formatter.datetime_format = '%I:%M:%S %p' }.to raise_error(NotImplementedError)
140
+ end
141
+ end
142
+ 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.6.1
4
+ version: 1.6.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Toshimitsu Takahashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-12 00:00:00.000000000 Z
11
+ date: 2018-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -68,14 +68,13 @@ dependencies:
68
68
  version: '3.0'
69
69
  description: |2
70
70
  A structured logging system is capable of handling a message, custom data or an exception easily.
71
- It has JSON formatter compatible with Bunyan for Node.js and human readable formatter with Awesome Print for console.
71
+ It has JSON formatters compatible with Bunyan or pino for Node.js and human readable formatter with Awesome Print for console.
72
72
  email:
73
73
  - toshi@tilfin.com
74
74
  executables: []
75
75
  extensions: []
76
76
  extra_rdoc_files: []
77
77
  files:
78
- - ".gitignore"
79
78
  - Gemfile
80
79
  - Gemfile.lock
81
80
  - LICENSE.txt
@@ -85,6 +84,8 @@ files:
85
84
  - lib/ougai/child_logger.rb
86
85
  - lib/ougai/formatters/base.rb
87
86
  - lib/ougai/formatters/bunyan.rb
87
+ - lib/ougai/formatters/for_json.rb
88
+ - lib/ougai/formatters/pino.rb
88
89
  - lib/ougai/formatters/readable.rb
89
90
  - lib/ougai/logger.rb
90
91
  - lib/ougai/logging.rb
@@ -92,6 +93,7 @@ files:
92
93
  - spec/child_logger_spec.rb
93
94
  - spec/formatters/base_spec.rb
94
95
  - spec/formatters/bunyan_spec.rb
96
+ - spec/formatters/pino_spec.rb
95
97
  - spec/formatters/readable_spec.rb
96
98
  - spec/logger_spec.rb
97
99
  - spec/logging_spec.rb
@@ -120,9 +122,10 @@ rubyforge_project:
120
122
  rubygems_version: 2.6.13
121
123
  signing_key:
122
124
  specification_version: 4
123
- summary: JSON logger compatible with node-bunyan is capable of handling structured
125
+ summary: JSON logger compatible with node-bunyan or pino is capable of handling structured
124
126
  data easily.
125
127
  test_files:
128
+ - spec/formatters/pino_spec.rb
126
129
  - spec/formatters/base_spec.rb
127
130
  - spec/formatters/bunyan_spec.rb
128
131
  - spec/formatters/readable_spec.rb
data/.gitignore DELETED
@@ -1,10 +0,0 @@
1
- /.bundle/
2
- /.yardoc
3
- /Gemfile.lock
4
- /_yardoc/
5
- /coverage/
6
- /doc/
7
- /pkg/
8
- /spec/reports/
9
- /tmp/
10
- /coverage/