sensible_logging 0.4.0 → 0.4.1

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
  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