sensible_logging 0.4.0 → 0.4.1

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
  SHA256:
3
- metadata.gz: b91e1451d99dabecf5e9126f248426ca32d622fd4aa90e73cd80b6a034f1ca98
4
- data.tar.gz: c7d8e9bd3ef502279b40c133a2aff29c9cfde8ed24985362d848960221c38d31
3
+ metadata.gz: 8a3b74510253681a9999278535633d1297f065418722947adab13556809eff9a
4
+ data.tar.gz: ea8e280d74e25f055ccb30fea6c5adbe87154e5b67e2ded25a2b0c87365f5bea
5
5
  SHA512:
6
- metadata.gz: 57c777173f5b0f66a26f6b5b3761d148de8e9f11af77bee6a24a0157fe09dd3f00cc65705316d5d6ba9c5f70cb9cfdaf466988486ec9793ac039b8b73697d1ef
7
- data.tar.gz: 5560735ee50f49f582d4983f537a25829d93f6967fc5c3efe44e4fc20bb26b4e7eab2a1f5a23e70cccbc9e60184fcae867124705b16d671230d01595ea13bbfb
6
+ metadata.gz: ffa0e0f617c0a8725b06ab70e44735206c7e88001912ccaa2b150e92ce27877af0fa4cc1cbfecaa96c1b1ce1cf433c98184a106233ec9a75cc5ffaffb188e782
7
+ data.tar.gz: 3f5758087a70913f9aeb4bd52c8fbd6177e316712cd8e70d41eabd3f55247964e4cc73d4174b2c238316daa3c732dbaa2ae6ebfb9eda27aff39a2c144864f497
@@ -2,16 +2,18 @@ version: 2
2
2
  jobs:
3
3
  build_and_test:
4
4
  docker:
5
- - image: circleci/ruby:2.5
5
+ - image: circleci/ruby:2.6.1
6
6
  environment:
7
- - RACK_ENV: test
7
+ RACK_ENV: test
8
8
 
9
9
  steps:
10
10
  - checkout
11
11
 
12
+ - run: gem install bundler
12
13
  - run: bundle install --jobs=4 --retry=3 --path vendor/bundle
13
14
 
14
15
  - run: bundle exec rspec --backtrace
16
+ - run: bundle exec rubocop
15
17
 
16
18
  workflows:
17
19
  version: 2
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  Gemfile.lock
2
2
  pkg
3
+ coverage
@@ -0,0 +1,8 @@
1
+ require: rubocop-rspec
2
+
3
+ Metrics/LineLength:
4
+ Max: 120
5
+
6
+ Metrics/BlockLength:
7
+ Exclude:
8
+ - 'spec/**/*.rb'
@@ -1 +1 @@
1
- 2.5.0
1
+ 2.6.1
@@ -0,0 +1,7 @@
1
+ SimpleCov.start do
2
+ minimum_coverage 100
3
+ if ENV['CI']
4
+ require 'codecov'
5
+ SimpleCov.formatter = SimpleCov::Formatter::Codecov
6
+ end
7
+ end
data/README.md CHANGED
@@ -1,13 +1,14 @@
1
- # Sensible logging
1
+ # Sensible Logging
2
2
 
3
- [![CircleCI](https://circleci.com/gh/madetech/sensible_logging.svg?style=svg)](https://circleci.com/gh/madetech/sensible_logging) [![Gem Version](https://badge.fury.io/rb/sensible_logging.png)](http://badge.fury.io/rb/sensible_logging)
3
+ [![CircleCI](https://circleci.com/gh/madetech/sensible_logging.svg?style=svg)](https://circleci.com/gh/madetech/sensible_logging)
4
+ [![codecov](https://codecov.io/gh/madetech/sensible_logging/branch/master/graph/badge.svg)](https://codecov.io/gh/madetech/sensible_logging)
5
+ [![Gem Version](https://badge.fury.io/rb/sensible_logging.png)](http://badge.fury.io/rb/sensible_logging)
4
6
 
5
-
6
- A logging library with sensible defaults for Sinatra apps.
7
+ A logging extension with sensible defaults for Sinatra apps.
7
8
 
8
9
  ## Features
9
10
 
10
- * Add (or use an existing if present `X-Request-Id`) request ID for use in logs
11
+ * Add a request UUID (or use an existing one if present in the `X-Request-Id` HTTP header) for use in logs, your app or other middlewares
11
12
  * Trim the request logs to the bare minimal (inspired by lograge):
12
13
  * method
13
14
  * path
@@ -15,28 +16,67 @@ A logging library with sensible defaults for Sinatra apps.
15
16
  * status
16
17
  * duration
17
18
  * params if a `GET` request
19
+
20
+ Example log line:
21
+ ```
22
+ method=GET path=/contact client=192.168.1.254 status=200 duration=0.124 params={"category"=>"question"}
23
+ ```
18
24
  * Tagged logging, with some sensible defaults:
25
+ * severity
19
26
  * subdomain
20
27
  * environment
21
- * unique request ID
28
+ * request UUID
29
+
30
+ Example log line:
31
+ ```
32
+ [INFO] [www.gb] [staging] [6004bb70-7b6d-43b6-a2cf-72d0336663ba] @todo tidy sql query
33
+ ```
22
34
 
23
35
  ## Usage
24
36
 
25
- 1. Add `sensible_logging` to your `Gemfile` and use `bundle install`.
26
- 2. In `app.rb` register the module and then define your logging defaults.
37
+ 1. Add `sensible_logging` to your `Gemfile` and install with `bundle install`:
27
38
 
28
- ```ruby
29
- require 'sensible_logging'
39
+ ```ruby
40
+ gem 'sensible_logging'
41
+ ```
42
+ 2. In your `app.rb` register the module and then define your logging configuration:
30
43
 
31
- class App < Sinatra::Base
32
- register Sinatra::SensibleLogging
44
+ ```ruby
45
+ require 'sensible_logging'
33
46
 
34
- sensible_logging(
35
- logger: Logger.new(STDOUT)
36
- )
47
+ class App < Sinatra::Base
48
+ register Sinatra::SensibleLogging
37
49
 
38
- # rest of code omitted
39
- ```
50
+ # Initialise Sensible Logging to add our middlewares.
51
+ sensible_logging(
52
+ logger: Logger.new(STDOUT)
53
+ )
54
+
55
+ # Configure the log level for different environments
56
+ configure :production do
57
+ set :log_level, Logger::INFO
58
+ end
59
+
60
+ # Requests will be logged in a minimal format
61
+ get '/' do
62
+ 'Hello!'
63
+ end
64
+
65
+ get '/about' do
66
+ # The standard Sinatra logger helper will use the Sensible Logging gem
67
+ logger.info('About page')
68
+ end
69
+
70
+ get '/contact' do
71
+ # In addition to the default tags, you can add additional ones by using the `tagged` block on the `logger` helper
72
+ # [INFO] [localhost] [development] [a9d0183d-a3c3-4081-b502-38dcf4c3c4d7] [todo] Contact page
73
+ logger.tagged('todo') do |logger|
74
+ logger.info('Contact page')
75
+ end
76
+ end
77
+
78
+ # rest of code omitted
79
+ ```
40
80
 
41
81
  ### Available options
42
82
 
@@ -45,13 +85,20 @@ There are a number of options that you can pass into `sensible_logging`:
45
85
  * `logger`: The logging object.
46
86
  **Default**: `Logger.new(STDOUT)`
47
87
  * `use_default_log_tags`: Includes the subdomain, `RACK_ENV` and unique request ID in the log tags.
48
- **Default**: `true`
88
+ **Default**: `true`
49
89
  * `tld_length`: For example, if your domain was `www.google.com` this would result in `www` being tagged as your subdomain. If your domain is `www.google.co.uk`, set this value to `2` to correctly identify the subdomain as `www` rather than `www.google`.
50
90
  **Default**: `1`.
51
91
  * `log_tags`: An array of additional log tags to include. This can be strings, or you can include a `lambda` that will be evaluated. The `lambda` is passed a Rack `Request` object, and it must return an array of string values.
52
92
  **Default**: `[]`
53
93
  * `exclude_params`: An array of parameter names to be excluded from `GET` requests. By default, `GET` parameters are outputted in logs. If for example with the request `http://google.com/?one=dog&two=cat` you didn't want the `one` logged, you would set `exclude_params` to be `['one']`
54
94
  **Default**: `[]`
95
+ * `include_log_severity`: Includes the log severity in the tagged output, such as `INFO`, `DEBUG` etc
96
+ **Default**: `true`
97
+
98
+ Sensible Logger will also respect the following Sinatra settings:
99
+
100
+ * `log_level`: The level at which your logger object should respect logs. See above example.
101
+ **Default**: `Logger::DEBUG`
55
102
 
56
103
  ## Examples
57
104
 
@@ -74,7 +121,7 @@ You should notice in the logs:
74
121
  * Standard Sinatra `logger` helper works out of the box within apps with tags.
75
122
  * Excluded parameters are not included, in this example `two` based on `config.ru`
76
123
  * The request log is minimal compared to out of the box Sinatra.
77
- * `env['request_id']` is now available to hook into Sentry reports.
124
+ * `env['request_id']` is now available to group log lines from the same request together, or to use in additional services such as Sentry.
78
125
 
79
126
  ## FAQ
80
127
 
@@ -84,8 +131,12 @@ To quote [lograge][link_lograge] (which was the inspiration for this library):
84
131
 
85
132
  > The syntax is heavily inspired by the log output of the Heroku router. It doesn't include any timestamp by default, instead, it assumes you use a proper log formatter instead.
86
133
 
134
+ ## Authors
135
+
136
+ By [David Winter](https://github.com/davidwinter), [Mark Sta Ana](https://github.com/booyaa) & [Anthony King](https://github.com/cybojenix)
137
+
87
138
  ## License
88
139
 
89
140
  MIT
90
141
 
91
- [link_lograge]: https://github.com/roidrage/lograge#lograge---taming-rails-default-request-logging
142
+ [link_lograge]: https://github.com/roidrage/lograge#lograge---taming-rails-default-request-logging
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/gem_tasks'
2
4
  require 'rspec/core/rake_task'
3
5
 
@@ -1,14 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sinatra/base'
2
4
  require 'logger'
3
5
 
4
6
  require_relative '../lib/sensible_logging'
5
7
 
8
+ # Example Sinatra app
6
9
  class App < Sinatra::Base
7
10
  register Sinatra::SensibleLogging
8
11
 
9
12
  sensible_logging(
10
13
  logger: Logger.new(STDOUT),
11
- log_tags: [lambda { |req| [req.port] }],
14
+ log_tags: [->(req) { [req.port] }],
12
15
  exclude_params: ['two']
13
16
  )
14
17
 
@@ -21,7 +24,10 @@ class App < Sinatra::Base
21
24
  end
22
25
 
23
26
  get '/hello' do
24
- logger.debug('test')
27
+ logger.tagged('todo') do |logger|
28
+ logger.debug('test')
29
+ env['rack.errors'].puts('This is an example error')
30
+ end
25
31
  'test'
26
32
  end
27
33
 
@@ -1,4 +1,5 @@
1
- #\ --quiet
1
+ # frozen_string_literal: true
2
+
2
3
  require_relative './app'
3
4
 
4
5
  run App
@@ -1,29 +1,70 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'sinatra/base'
2
4
 
3
5
  require_relative './sensible_logging/middlewares/request_id'
4
6
  require_relative './sensible_logging/middlewares/tagged_logger'
5
7
  require_relative './sensible_logging/middlewares/request_logger'
8
+ require_relative './sensible_logging/helpers/logger_io_wrap'
6
9
 
10
+ module Rack
11
+ # Disable Rack::CommonLogger
12
+ class CommonLogger
13
+ def call(env)
14
+ @app.call(env)
15
+ end
16
+ end
17
+ end
18
+
19
+ # Sinatra extension
7
20
  module Sinatra
21
+ # Sensible logging library for Sinatra based Apps
8
22
  module SensibleLogging
9
- def sensible_logging(
23
+ def sensible_logging( # rubocop:disable Metrics/MethodLength, Metrics/ParameterLists
10
24
  logger: Logger.new(STDOUT),
11
25
  log_tags: [],
12
26
  use_default_log_tags: true,
13
27
  exclude_params: [],
14
- tld_length: 1
28
+ tld_length: 1,
29
+ include_log_severity: true
15
30
  )
16
- use RequestId
17
- use TaggedLogger, logger, log_tags, use_default_log_tags, tld_length
18
- use RequestLogger, exclude_params
31
+ setup_middlewares(
32
+ logger: logger,
33
+ log_tags: log_tags,
34
+ use_default_log_tags: use_default_log_tags,
35
+ exclude_params: exclude_params,
36
+ tld_length: tld_length,
37
+ include_log_severity: include_log_severity
38
+ )
19
39
 
20
40
  before do
21
- env['rack.errors'] = env['rack.logger'] = env['logger']
22
- if settings.log_level != nil
23
- logger.level = settings.log_level
24
- end
41
+ env['rack.logger'] = env['logger']
42
+ env['rack.errors'] = IOWrap.new(logger, level: Logger::ERROR)
43
+ logger.level = settings.log_level unless settings.log_level.nil?
25
44
  end
26
45
  end
46
+
47
+ private
48
+
49
+ def setup_middlewares( # rubocop:disable Metrics/ParameterLists
50
+ logger:,
51
+ log_tags:,
52
+ use_default_log_tags:,
53
+ exclude_params:,
54
+ tld_length:,
55
+ include_log_severity:
56
+ )
57
+ use RequestId
58
+ use(
59
+ TaggedLogger,
60
+ logger: logger,
61
+ tags: log_tags,
62
+ use_default_tags: use_default_log_tags,
63
+ tld_length: tld_length,
64
+ include_log_severity: include_log_severity
65
+ )
66
+ use RequestLogger, exclude_params
67
+ end
27
68
  end
28
69
 
29
70
  register SensibleLogging
@@ -0,0 +1,23 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+
5
+ # Wrap Logger objects to behave as IO objects in Rack
6
+ class IOWrap
7
+ def initialize(logger, level: Logger::INFO)
8
+ @logger = logger
9
+ @level = level
10
+ end
11
+
12
+ def flush
13
+ # No-Op
14
+ end
15
+
16
+ def puts(message)
17
+ logger.add(level, message)
18
+ end
19
+
20
+ private
21
+
22
+ attr_reader :logger, :level
23
+ end
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Returns subdomains from a full qualified domain name
1
4
  class SubdomainParser
2
5
  attr_reader :tld_length
3
6
 
@@ -15,7 +18,7 @@ class SubdomainParser
15
18
 
16
19
  subdomain_parts = domain_parts[0...subdomain_length]
17
20
 
18
- return nil if subdomain_parts.size < 1
21
+ return nil if subdomain_parts.empty?
19
22
 
20
23
  subdomain_parts.join('.')
21
24
  end
@@ -1,5 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'securerandom'
2
4
 
5
+ # Captures request id
3
6
  class RequestId
4
7
  def initialize(app)
5
8
  @app = app
@@ -1,12 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rack/request'
2
4
 
5
+ # Captures information around request
3
6
  class RequestLogger
4
7
  def initialize(app, filtered_params = [])
5
8
  @app = app
6
9
  @filtered_params = filtered_params
7
10
  end
8
11
 
9
- def call(env)
12
+ def call(env) # rubocop:disable Metrics/AbcSize
10
13
  req = Rack::Request.new(env)
11
14
  start_time = Time.now
12
15
  status, headers, body = @app.call(env)
@@ -16,7 +19,7 @@ class RequestLogger
16
19
 
17
20
  message = "method=#{req.request_method} path=#{req.path} client=#{client_ip} status=#{status} duration=#{end_time}"
18
21
  filtered_params = filter_params(req)
19
- message += " params=#{filtered_params}" if req.get? && ! filtered_params.empty?
22
+ message += " params=#{filtered_params}" if req.get? && !filtered_params.empty?
20
23
  env['logger'].info(message)
21
24
  [status, headers, body]
22
25
  end
@@ -24,6 +27,6 @@ class RequestLogger
24
27
  private
25
28
 
26
29
  def filter_params(req)
27
- req.params.select { |x| ! @filtered_params.include?(x) }
30
+ req.params.reject { |x| @filtered_params.include?(x) }
28
31
  end
29
32
  end
@@ -1,14 +1,26 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'ipaddr'
2
4
  require 'active_support/tagged_logging'
3
5
  require_relative '../helpers/subdomain_parser'
4
6
 
7
+ # Allow custom tags to be captured
5
8
  class TaggedLogger
6
- def initialize(app, logger = Logger.new(STDOUT), tags = [], use_default_log_tags = true, tld_length = 1)
9
+ def initialize( # rubocop:disable Metrics/ParameterLists
10
+ app,
11
+ logger: Logger.new(STDOUT),
12
+ tags: [],
13
+ use_default_tags: true,
14
+ tld_length: 1,
15
+ include_log_severity: true
16
+ )
7
17
  @app = app
8
- @logger = ActiveSupport::TaggedLogging.new(logger)
9
18
 
19
+ logger = setup_severity_tag(logger) if include_log_severity
20
+
21
+ @logger = ActiveSupport::TaggedLogging.new(logger)
10
22
  @tags = []
11
- @tags += default_tags(tld_length: tld_length) if use_default_log_tags
23
+ @tags += default_tags(tld_length: tld_length) if use_default_tags
12
24
  @tags += tags
13
25
  end
14
26
 
@@ -21,6 +33,14 @@ class TaggedLogger
21
33
 
22
34
  private
23
35
 
36
+ def setup_severity_tag(logger)
37
+ original_formatter = logger.formatter || ActiveSupport::Logger::SimpleFormatter.new
38
+ logger.formatter = proc do |severity, *args|
39
+ "[#{severity}] #{original_formatter.call(severity, *args)}"
40
+ end
41
+ logger
42
+ end
43
+
24
44
  def default_tags(tld_length: 1)
25
45
  [lambda { |req|
26
46
  [subdomain(req.host, tld_length) || 'n/a', ENV['RACK_ENV'], req.env['request_id']]
@@ -36,7 +56,7 @@ class TaggedLogger
36
56
 
37
57
  def generate_tags(env)
38
58
  req = Rack::Request.new(env)
39
- tags = @tags.map do |tag|
59
+ @tags.map do |tag|
40
60
  tag.call(req)
41
61
  end
42
62
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SensibleLogging
2
- VERSION = '0.4.0'
4
+ VERSION = '0.4.1'
3
5
  end
@@ -1,5 +1,6 @@
1
+ # frozen_string_literal: true
1
2
 
2
- lib = File.expand_path('../lib', __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
5
  require 'sensible_logging/version'
5
6
 
@@ -19,13 +20,17 @@ Gem::Specification.new do |spec|
19
20
 
20
21
  spec.require_paths = ['lib']
21
22
 
22
- spec.add_runtime_dependency 'rack', '~> 2.0'
23
23
  spec.add_runtime_dependency 'activesupport', '~> 5.2'
24
+ spec.add_runtime_dependency 'rack', '~> 2.0'
24
25
 
25
- spec.add_development_dependency 'sinatra', '~> 2.0'
26
+ spec.add_development_dependency 'bundler', '~> 2.0.1'
27
+ spec.add_development_dependency 'codecov'
28
+ spec.add_development_dependency 'pry', '~> 0.12.2'
26
29
  spec.add_development_dependency 'puma', '~> 3.12'
27
- spec.add_development_dependency 'bundler', '~> 1.16'
28
- spec.add_development_dependency 'rake', '~> 10.0'
30
+ spec.add_development_dependency 'rake', '~> 12.3'
29
31
  spec.add_development_dependency 'rspec', '~> 3.0'
30
- spec.add_development_dependency 'pry', '~> 0.12.2'
32
+ spec.add_development_dependency 'rubocop', '~> 0.65.0'
33
+ spec.add_development_dependency 'rubocop-rspec', '~> 1.32.0'
34
+ spec.add_development_dependency 'simplecov'
35
+ spec.add_development_dependency 'sinatra', '~> 2.0'
31
36
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensible_logging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Winter
@@ -10,8 +10,22 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-01-09 00:00:00.000000000 Z
13
+ date: 2019-05-13 00:00:00.000000000 Z
14
14
  dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: activesupport
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: '5.2'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: '5.2'
15
29
  - !ruby/object:Gem::Dependency
16
30
  name: rack
17
31
  requirement: !ruby/object:Gem::Requirement
@@ -27,33 +41,47 @@ dependencies:
27
41
  - !ruby/object:Gem::Version
28
42
  version: '2.0'
29
43
  - !ruby/object:Gem::Dependency
30
- name: activesupport
44
+ name: bundler
31
45
  requirement: !ruby/object:Gem::Requirement
32
46
  requirements:
33
47
  - - "~>"
34
48
  - !ruby/object:Gem::Version
35
- version: '5.2'
36
- type: :runtime
49
+ version: 2.0.1
50
+ type: :development
37
51
  prerelease: false
38
52
  version_requirements: !ruby/object:Gem::Requirement
39
53
  requirements:
40
54
  - - "~>"
41
55
  - !ruby/object:Gem::Version
42
- version: '5.2'
56
+ version: 2.0.1
43
57
  - !ruby/object:Gem::Dependency
44
- name: sinatra
58
+ name: codecov
59
+ requirement: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '0'
64
+ type: :development
65
+ prerelease: false
66
+ version_requirements: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: '0'
71
+ - !ruby/object:Gem::Dependency
72
+ name: pry
45
73
  requirement: !ruby/object:Gem::Requirement
46
74
  requirements:
47
75
  - - "~>"
48
76
  - !ruby/object:Gem::Version
49
- version: '2.0'
77
+ version: 0.12.2
50
78
  type: :development
51
79
  prerelease: false
52
80
  version_requirements: !ruby/object:Gem::Requirement
53
81
  requirements:
54
82
  - - "~>"
55
83
  - !ruby/object:Gem::Version
56
- version: '2.0'
84
+ version: 0.12.2
57
85
  - !ruby/object:Gem::Dependency
58
86
  name: puma
59
87
  requirement: !ruby/object:Gem::Requirement
@@ -69,61 +97,89 @@ dependencies:
69
97
  - !ruby/object:Gem::Version
70
98
  version: '3.12'
71
99
  - !ruby/object:Gem::Dependency
72
- name: bundler
100
+ name: rake
73
101
  requirement: !ruby/object:Gem::Requirement
74
102
  requirements:
75
103
  - - "~>"
76
104
  - !ruby/object:Gem::Version
77
- version: '1.16'
105
+ version: '12.3'
78
106
  type: :development
79
107
  prerelease: false
80
108
  version_requirements: !ruby/object:Gem::Requirement
81
109
  requirements:
82
110
  - - "~>"
83
111
  - !ruby/object:Gem::Version
84
- version: '1.16'
112
+ version: '12.3'
85
113
  - !ruby/object:Gem::Dependency
86
- name: rake
114
+ name: rspec
87
115
  requirement: !ruby/object:Gem::Requirement
88
116
  requirements:
89
117
  - - "~>"
90
118
  - !ruby/object:Gem::Version
91
- version: '10.0'
119
+ version: '3.0'
92
120
  type: :development
93
121
  prerelease: false
94
122
  version_requirements: !ruby/object:Gem::Requirement
95
123
  requirements:
96
124
  - - "~>"
97
125
  - !ruby/object:Gem::Version
98
- version: '10.0'
126
+ version: '3.0'
99
127
  - !ruby/object:Gem::Dependency
100
- name: rspec
128
+ name: rubocop
101
129
  requirement: !ruby/object:Gem::Requirement
102
130
  requirements:
103
131
  - - "~>"
104
132
  - !ruby/object:Gem::Version
105
- version: '3.0'
133
+ version: 0.65.0
106
134
  type: :development
107
135
  prerelease: false
108
136
  version_requirements: !ruby/object:Gem::Requirement
109
137
  requirements:
110
138
  - - "~>"
111
139
  - !ruby/object:Gem::Version
112
- version: '3.0'
140
+ version: 0.65.0
113
141
  - !ruby/object:Gem::Dependency
114
- name: pry
142
+ name: rubocop-rspec
115
143
  requirement: !ruby/object:Gem::Requirement
116
144
  requirements:
117
145
  - - "~>"
118
146
  - !ruby/object:Gem::Version
119
- version: 0.12.2
147
+ version: 1.32.0
120
148
  type: :development
121
149
  prerelease: false
122
150
  version_requirements: !ruby/object:Gem::Requirement
123
151
  requirements:
124
152
  - - "~>"
125
153
  - !ruby/object:Gem::Version
126
- version: 0.12.2
154
+ version: 1.32.0
155
+ - !ruby/object:Gem::Dependency
156
+ name: simplecov
157
+ requirement: !ruby/object:Gem::Requirement
158
+ requirements:
159
+ - - ">="
160
+ - !ruby/object:Gem::Version
161
+ version: '0'
162
+ type: :development
163
+ prerelease: false
164
+ version_requirements: !ruby/object:Gem::Requirement
165
+ requirements:
166
+ - - ">="
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ - !ruby/object:Gem::Dependency
170
+ name: sinatra
171
+ requirement: !ruby/object:Gem::Requirement
172
+ requirements:
173
+ - - "~>"
174
+ - !ruby/object:Gem::Version
175
+ version: '2.0'
176
+ type: :development
177
+ prerelease: false
178
+ version_requirements: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - "~>"
181
+ - !ruby/object:Gem::Version
182
+ version: '2.0'
127
183
  description:
128
184
  email:
129
185
  - sre@madetech.com
@@ -134,7 +190,9 @@ files:
134
190
  - ".circleci/config.yml"
135
191
  - ".gitignore"
136
192
  - ".rspec"
193
+ - ".rubocop.yml"
137
194
  - ".ruby-version"
195
+ - ".simplecov"
138
196
  - Gemfile
139
197
  - LICENSE.txt
140
198
  - README.md
@@ -142,6 +200,7 @@ files:
142
200
  - examples/app.rb
143
201
  - examples/config.ru
144
202
  - lib/sensible_logging.rb
203
+ - lib/sensible_logging/helpers/logger_io_wrap.rb
145
204
  - lib/sensible_logging/helpers/subdomain_parser.rb
146
205
  - lib/sensible_logging/middlewares/request_id.rb
147
206
  - lib/sensible_logging/middlewares/request_logger.rb
@@ -167,8 +226,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
167
226
  - !ruby/object:Gem::Version
168
227
  version: '0'
169
228
  requirements: []
170
- rubyforge_project:
171
- rubygems_version: 2.7.3
229
+ rubygems_version: 3.0.1
172
230
  signing_key:
173
231
  specification_version: 4
174
232
  summary: Sensible logging defaults for your Sinatra app