sensible_logging 0.3.0 → 0.4.3

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: 40ddd14f9217b3c9465bf528d8a1a2befb3ff17177340d119533e58d16e208de
4
- data.tar.gz: 5a20a67b1f01cc7fdd4f7ec7959472086e2d73987ab5c2d6d54f1cbc823d4183
3
+ metadata.gz: fe336ff76caedb39e58602dbf02834da1421e6b0c446650c83f92d6b3c57b1c9
4
+ data.tar.gz: 45ba85d3a3b2809f94aa6b36c8269111d15c88a053fa63a056409c16dd4e7896
5
5
  SHA512:
6
- metadata.gz: 0f17b47325de077896ae98001452e19a02df1ba12fce8734139ec47d665a1dc8db77609c15d127ff74c8da57e1aebd0f2464c5fa63d530b1e6443d47e37a8c7a
7
- data.tar.gz: cea09e17ded5de488a701a7aa5e737320ab9c6e444493669d996e57c4979a14199b979eac44cc2f8232a6c5cc6e58619205393a7f43b1436db1f9fa7aadae440
6
+ metadata.gz: 142f2b9467a123ab1222b54273a04831eb47b85f250fe4fc226d1d515d85390e96f6651f9072e2a450e123c4999a880bd67a2de048f3765b74699c3554df2298
7
+ data.tar.gz: 88dc78761416c8c0402f22bf1a871175268cef687a173a7b47a0b3459b6363bf1f92a5c35f4920ee7c39436beae2051307762d9f4ed781ce1f48cacc49f0691b
data/.editorconfig ADDED
@@ -0,0 +1,5 @@
1
+ root = true
2
+
3
+ [*.rb]
4
+ indent_style = space
5
+ indent_size = 2
@@ -0,0 +1 @@
1
+ github: [davidwinter]
@@ -0,0 +1,8 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "bundler"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "daily"
7
+ assignees:
8
+ - davidwinter
@@ -0,0 +1,27 @@
1
+ name: test
2
+
3
+ on:
4
+ push:
5
+ branches: [ main ]
6
+ pull_request:
7
+ branches: [ main ]
8
+
9
+ jobs:
10
+ test:
11
+
12
+ runs-on: ubuntu-latest
13
+ strategy:
14
+ matrix:
15
+ ruby-version: ['2.6', '2.7', '3.0']
16
+
17
+ steps:
18
+ - uses: actions/checkout@v2
19
+ - name: Set up Ruby
20
+ uses: ruby/setup-ruby@v1
21
+ with:
22
+ ruby-version: ${{ matrix.ruby-version }}
23
+ bundler-cache: true
24
+ - name: Run tests
25
+ run: bundle exec rspec --backtrace
26
+ - name: Run linting
27
+ run: bundle exec rubocop
data/.gitignore CHANGED
@@ -1,2 +1,3 @@
1
1
  Gemfile.lock
2
2
  pkg
3
+ coverage
data/.rubocop.yml ADDED
@@ -0,0 +1,15 @@
1
+ AllCops:
2
+ NewCops: enable
3
+ SuggestExtensions: false
4
+
5
+ require: rubocop-rspec
6
+
7
+ Layout/LineLength:
8
+ Max: 120
9
+
10
+ RSpec/MultipleMemoizedHelpers:
11
+ Enabled: false
12
+
13
+ Metrics/BlockLength:
14
+ Exclude:
15
+ - 'spec/**/*.rb'
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- 2.5.0
1
+ 2.6.1
data/.simplecov ADDED
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ SimpleCov.start do
4
+ minimum_coverage 100
5
+ if ENV['CI']
6
+ require 'codecov'
7
+ SimpleCov.formatter = SimpleCov::Formatter::Codecov
8
+ end
9
+ end
data/README.md CHANGED
@@ -1,41 +1,147 @@
1
- # Sensible logging
1
+ # Sensible Logging
2
2
 
3
- Proof of concept for some sensible defaults for logging in a Sinatra app.
3
+ [![test](https://github.com/davidwinter/sensible_logging/workflows/test/badge.svg)](https://github.com/davidwinter/sensible_logging/actions?query=workflow%3Atest) [![Codecov](https://img.shields.io/codecov/c/github/davidwinter/sensible_logging)](https://codecov.io/gh/davidwinter/sensible_logging) [![Gem](https://img.shields.io/gem/v/sensible_logging)](https://rubygems.org/gems/sensible_logging) [![Gem](https://img.shields.io/gem/dt/sensible_logging)](https://rubygems.org/gems/sensible_logging)
4
4
 
5
- Plan will be to wrap this up in a single self contained gem that can easily be dropped into existing Sinatra applications.
5
+ > A logging extension with sensible defaults for Sinatra apps.
6
6
 
7
7
  ## Features
8
8
 
9
- * Add (or use an existing) request ID for use in logs
10
- * Trim the request logs to the bare minimal (method, path, status, duration and params if a GET request) - similar to lograge with Rails
11
- * Tagged logging out of the box, with some sensible defaults; host, environment and request ID
9
+ * 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
10
+ * Trim the request logs to the bare minimal (inspired by lograge):
11
+ * method
12
+ * path
13
+ * requesting IP address
14
+ * status
15
+ * duration
16
+ * params if a `GET` request
12
17
 
13
- ## Demo
18
+ Example log line:
19
+ ```
20
+ method=GET path=/contact client=192.168.1.254 status=200 duration=0.124 params={"category"=>"question"}
21
+ ```
22
+ * Tagged logging, with some sensible defaults:
23
+ * severity
24
+ * subdomain
25
+ * environment
26
+ * request UUID
14
27
 
15
- There is an example Sinatra app included in this repo, so:
28
+ Example log line:
29
+ ```
30
+ [INFO] [www.gb] [staging] [6004bb70-7b6d-43b6-a2cf-72d0336663ba] @todo tidy sql query
31
+ ```
16
32
 
17
- ```
33
+ ## Usage
34
+
35
+ 1. Add `sensible_logging` to your `Gemfile` and install with `bundle install`:
36
+
37
+ ```ruby
38
+ gem 'sensible_logging'
39
+ ```
40
+ 2. In your `app.rb` register the module and then define your logging configuration:
41
+
42
+ ```ruby
43
+ require 'sensible_logging'
44
+
45
+ class App < Sinatra::Base
46
+ register Sinatra::SensibleLogging
47
+
48
+ # Initialise Sensible Logging to add our middlewares.
49
+ sensible_logging(
50
+ logger: Logger.new($stdout)
51
+ )
52
+
53
+ # Configure the log level for different environments
54
+ configure :production do
55
+ set :log_level, Logger::INFO
56
+ end
57
+
58
+ # Requests will be logged in a minimal format
59
+ get '/' do
60
+ 'Hello!'
61
+ end
62
+
63
+ get '/about' do
64
+ # The standard Sinatra logger helper will use the Sensible Logging gem
65
+ logger.info('About page')
66
+ end
67
+
68
+ get '/contact' do
69
+ # In addition to the default tags, you can add additional ones by using the `tagged` block on the `logger` helper
70
+ # [INFO] [localhost] [development] [a9d0183d-a3c3-4081-b502-38dcf4c3c4d7] [todo] Contact page
71
+ logger.tagged('todo') do |logger|
72
+ logger.info('Contact page')
73
+ end
74
+ end
75
+
76
+ # rest of code omitted
77
+ ```
78
+
79
+ ### Available options
80
+
81
+ There are a number of options that you can pass into `sensible_logging`:
82
+
83
+ * `logger`: The logging object.
84
+ **Default**: `Logger.new($stdout)`
85
+ * `use_default_log_tags`: Includes the subdomain, `RACK_ENV` and unique request ID in the log tags.
86
+ **Default**: `true`
87
+ * `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`.
88
+ **Default**: `1`.
89
+ * `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.
90
+ **Default**: `[]`
91
+ * `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']`
92
+ **Default**: `[]`
93
+ * `include_log_severity`: Includes the log severity in the tagged output, such as `INFO`, `DEBUG` etc
94
+ **Default**: `true`
95
+
96
+ Sensible Logger will also respect the following Sinatra settings:
97
+
98
+ * `log_level`: The level at which your logger object should respect logs. See above example.
99
+ **Default**: `Logger::DEBUG`
100
+
101
+ ## Examples
102
+
103
+ There is an example Sinatra app included in this repo. Here's how to use it:
104
+
105
+ ```shell
18
106
  bundle install
107
+ cd examples
19
108
  rackup
20
109
  ```
21
110
 
22
111
  With the app running, run some curl commands against it:
23
112
 
24
- ```
113
+ ```shell
25
114
  curl 'localhost:9292/hello?one=two&two=three'
26
115
  ```
27
116
 
28
117
  You should notice in the logs:
29
118
 
30
119
  * Standard Sinatra `logger` helper works out of the box within apps with tags.
31
- * Excluded paramaters are not included, in this example `two` based on `config.ru`
120
+ * Excluded parameters are not included, in this example `two` based on `config.ru`
32
121
  * The request log is minimal compared to out of the box Sinatra.
33
- * `env['request_id']` is now available to hook into Sentry reports.
122
+ * `env['request_id']` is now available to group log lines from the same request together, or to use in additional services such as Sentry.
123
+
124
+ ## FAQ
125
+
126
+ ### Why is the timestamp absent?
127
+
128
+ To quote [lograge][link_lograge] (which was the inspiration for this library):
129
+
130
+ > 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.
131
+
132
+ ## Releasing
133
+
134
+ 1. Update the version number `lib/sensible_logging/version.rb`
135
+ 2. Create a git commit and tag with the new version number: `git tag -a v0.4.2 -m "v0.4.2"`
136
+ 3. Create a new PR with this change and once approved, merge to `main`
137
+ 4. Once approved and merged in, locally, run: `bundle exec rake release` which will build and push the new gem to Rubygems
138
+
139
+ ## Authors
34
140
 
35
- ## Using
141
+ By [David Winter](https://github.com/davidwinter) with contributions from [Mark Sta Ana](https://github.com/booyaa) & [Anthony King](https://github.com/cybojenix)
36
142
 
37
- Key thing is to wrap the Sinatra app in `sensible_logging` (as in `config.ru`) with your required options for logger, log tags and excluded parameters.
143
+ ## License
38
144
 
39
- ## Todo
145
+ MIT
40
146
 
41
- Need to ensure `sensible_logging` confirms to all of the relevant `productionisation` checklist items. Pretty much there though.
147
+ [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
 
data/examples/app.rb CHANGED
@@ -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
- logger: Logger.new(STDOUT),
11
- log_tags: [lambda { |req| [req.port] }],
13
+ logger: Logger.new($stdout),
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
 
data/examples/config.ru CHANGED
@@ -1,4 +1,5 @@
1
- #\ --quiet
1
+ # frozen_string_literal: true
2
+
2
3
  require_relative './app'
3
4
 
4
5
  run App
@@ -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,20 +1,25 @@
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)
13
16
  end_time = Time.now - start_time
14
17
 
15
- message = "method=#{req.request_method} path=#{req.path} status=#{status} duration=#{end_time}"
18
+ client_ip = req.ip || 'n/a'
19
+
20
+ message = "method=#{req.request_method} path=#{req.path} client=#{client_ip} status=#{status} duration=#{end_time}"
16
21
  filtered_params = filter_params(req)
17
- message += " params=#{filtered_params}" if req.get? && ! filtered_params.empty?
22
+ message += " params=#{filtered_params}" if req.get? && !filtered_params.empty?
18
23
  env['logger'].info(message)
19
24
  [status, headers, body]
20
25
  end
@@ -22,6 +27,6 @@ class RequestLogger
22
27
  private
23
28
 
24
29
  def filter_params(req)
25
- req.params.select { |x| ! @filtered_params.include?(x) }
30
+ req.params.reject { |x| @filtered_params.include?(x) }
26
31
  end
27
32
  end
@@ -1,14 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'ipaddr'
1
4
  require 'active_support/tagged_logging'
2
5
  require_relative '../helpers/subdomain_parser'
3
6
 
7
+ # Allow custom tags to be captured
4
8
  class TaggedLogger
5
- def initialize(app, logger = Logger.new(STDOUT), tags = [], use_default_log_tags = true, tld_length = 1)
9
+ def initialize( # rubocop:disable Metrics/MethodLength
10
+ app,
11
+ options = {}
12
+ )
6
13
  @app = app
7
- @logger = ActiveSupport::TaggedLogging.new(logger)
8
14
 
15
+ options = {
16
+ logger: Logger.new($stdout),
17
+ tags: [],
18
+ use_default_tags: true,
19
+ tld_length: 1,
20
+ include_log_severity: true
21
+ }.merge(options)
22
+
23
+ options[:logger] = setup_severity_tag(options[:logger]) if options[:include_log_severity]
24
+
25
+ @logger = ActiveSupport::TaggedLogging.new(options[:logger])
9
26
  @tags = []
10
- @tags += default_tags(tld_length: tld_length) if use_default_log_tags
11
- @tags += tags
27
+ @tags += default_tags(tld_length: options[:tld_length]) if options[:use_default_tags]
28
+ @tags += options[:tags]
12
29
  end
13
30
 
14
31
  def call(env)
@@ -20,18 +37,30 @@ class TaggedLogger
20
37
 
21
38
  private
22
39
 
40
+ def setup_severity_tag(logger)
41
+ original_formatter = logger.formatter || ActiveSupport::Logger::SimpleFormatter.new
42
+ logger.formatter = proc do |severity, *args|
43
+ "[#{severity}] #{original_formatter.call(severity, *args)}"
44
+ end
45
+ logger
46
+ end
47
+
23
48
  def default_tags(tld_length: 1)
24
49
  [lambda { |req|
25
- subdomain_parser = SubdomainParser.new(tld_length: tld_length)
26
- subdomain = subdomain_parser.parse(req.host)
27
-
28
- [subdomain || 'n/a', ENV['RACK_ENV'], req.env['request_id']]
50
+ [subdomain(req.host, tld_length) || 'n/a', ENV['RACK_ENV'], req.env['request_id']]
29
51
  }]
30
52
  end
31
53
 
54
+ def subdomain(host, tld_length)
55
+ IPAddr.new(host)
56
+ rescue IPAddr::InvalidAddressError
57
+ subdomain_parser = SubdomainParser.new(tld_length: tld_length)
58
+ subdomain_parser.parse(host)
59
+ end
60
+
32
61
  def generate_tags(env)
33
62
  req = Rack::Request.new(env)
34
- tags = @tags.map do |tag|
63
+ @tags.map do |tag|
35
64
  tag.call(req)
36
65
  end
37
66
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SensibleLogging
2
- VERSION = "0.3.0"
4
+ VERSION = '0.4.3'
3
5
  end
@@ -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'
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
6
18
 
19
+ # Sinatra extension
7
20
  module Sinatra
21
+ # Sensible logging library for Sinatra based Apps
8
22
  module SensibleLogging
9
- def sensible_logging(
10
- logger:,
23
+ def sensible_logging( # rubocop:disable Metrics/MethodLength, Metrics/ParameterLists
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
@@ -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
 
@@ -7,25 +8,31 @@ Gem::Specification.new do |spec|
7
8
  spec.name = 'sensible_logging'
8
9
  spec.version = SensibleLogging::VERSION
9
10
  spec.authors = ['David Winter', 'Mark Sta Ana', 'Anthony King']
10
- spec.email = ['sre@madetech.com']
11
+ spec.email = ['i@djw.me']
11
12
 
12
13
  spec.summary = 'Sensible logging defaults for your Sinatra app'
13
- spec.homepage = 'https://github.com/madetech/sensible_logging'
14
+ spec.homepage = 'https://github.com/davidwinter/sensible_logging'
14
15
  spec.license = 'MIT'
15
16
 
16
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
17
18
  f.match(%r{^(test|spec|features)/})
18
19
  end
19
20
 
21
+ spec.required_ruby_version = '>= 2.6'
22
+
20
23
  spec.require_paths = ['lib']
21
24
 
25
+ spec.add_runtime_dependency 'activesupport', '>= 5.2', '< 7.0'
22
26
  spec.add_runtime_dependency 'rack', '~> 2.0'
23
- spec.add_runtime_dependency 'activesupport', '~> 5.2'
24
27
 
25
- spec.add_development_dependency 'sinatra', '~> 2.0'
26
- spec.add_development_dependency 'puma', '~> 3.12'
27
- spec.add_development_dependency 'bundler', '~> 1.16'
28
- spec.add_development_dependency 'rake', '~> 10.0'
28
+ spec.add_development_dependency 'bundler', '~> 2.2.0'
29
+ spec.add_development_dependency 'codecov'
30
+ spec.add_development_dependency 'pry', '~> 0.14.1'
31
+ spec.add_development_dependency 'puma', '~> 5.3'
32
+ spec.add_development_dependency 'rake', '~> 13.0'
29
33
  spec.add_development_dependency 'rspec', '~> 3.0'
30
- spec.add_development_dependency 'pry', '~> 0.12.2'
34
+ spec.add_development_dependency 'rubocop', '~> 1.20.0'
35
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.4.0'
36
+ spec.add_development_dependency 'simplecov'
37
+ spec.add_development_dependency 'sinatra', '~> 2.0'
31
38
  end
metadata CHANGED
@@ -1,17 +1,37 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensible_logging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Winter
8
8
  - Mark Sta Ana
9
9
  - Anthony King
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2019-01-08 00:00:00.000000000 Z
13
+ date: 2021-08-26 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
+ - - "<"
23
+ - !ruby/object:Gem::Version
24
+ version: '7.0'
25
+ type: :runtime
26
+ prerelease: false
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: '5.2'
32
+ - - "<"
33
+ - !ruby/object:Gem::Version
34
+ version: '7.0'
15
35
  - !ruby/object:Gem::Dependency
16
36
  name: rack
17
37
  requirement: !ruby/object:Gem::Requirement
@@ -27,75 +47,75 @@ dependencies:
27
47
  - !ruby/object:Gem::Version
28
48
  version: '2.0'
29
49
  - !ruby/object:Gem::Dependency
30
- name: activesupport
50
+ name: bundler
31
51
  requirement: !ruby/object:Gem::Requirement
32
52
  requirements:
33
53
  - - "~>"
34
54
  - !ruby/object:Gem::Version
35
- version: '5.2'
36
- type: :runtime
55
+ version: 2.2.0
56
+ type: :development
37
57
  prerelease: false
38
58
  version_requirements: !ruby/object:Gem::Requirement
39
59
  requirements:
40
60
  - - "~>"
41
61
  - !ruby/object:Gem::Version
42
- version: '5.2'
62
+ version: 2.2.0
43
63
  - !ruby/object:Gem::Dependency
44
- name: sinatra
64
+ name: codecov
45
65
  requirement: !ruby/object:Gem::Requirement
46
66
  requirements:
47
- - - "~>"
67
+ - - ">="
48
68
  - !ruby/object:Gem::Version
49
- version: '2.0'
69
+ version: '0'
50
70
  type: :development
51
71
  prerelease: false
52
72
  version_requirements: !ruby/object:Gem::Requirement
53
73
  requirements:
54
- - - "~>"
74
+ - - ">="
55
75
  - !ruby/object:Gem::Version
56
- version: '2.0'
76
+ version: '0'
57
77
  - !ruby/object:Gem::Dependency
58
- name: puma
78
+ name: pry
59
79
  requirement: !ruby/object:Gem::Requirement
60
80
  requirements:
61
81
  - - "~>"
62
82
  - !ruby/object:Gem::Version
63
- version: '3.12'
83
+ version: 0.14.1
64
84
  type: :development
65
85
  prerelease: false
66
86
  version_requirements: !ruby/object:Gem::Requirement
67
87
  requirements:
68
88
  - - "~>"
69
89
  - !ruby/object:Gem::Version
70
- version: '3.12'
90
+ version: 0.14.1
71
91
  - !ruby/object:Gem::Dependency
72
- name: bundler
92
+ name: puma
73
93
  requirement: !ruby/object:Gem::Requirement
74
94
  requirements:
75
95
  - - "~>"
76
96
  - !ruby/object:Gem::Version
77
- version: '1.16'
97
+ version: '5.3'
78
98
  type: :development
79
99
  prerelease: false
80
100
  version_requirements: !ruby/object:Gem::Requirement
81
101
  requirements:
82
102
  - - "~>"
83
103
  - !ruby/object:Gem::Version
84
- version: '1.16'
104
+ version: '5.3'
85
105
  - !ruby/object:Gem::Dependency
86
106
  name: rake
87
107
  requirement: !ruby/object:Gem::Requirement
88
108
  requirements:
89
109
  - - "~>"
90
110
  - !ruby/object:Gem::Version
91
- version: '10.0'
111
+ version: '13.0'
92
112
  type: :development
93
113
  prerelease: false
94
114
  version_requirements: !ruby/object:Gem::Requirement
95
115
  requirements:
96
116
  - - "~>"
97
117
  - !ruby/object:Gem::Version
98
- version: '10.0'
118
+ version: '13.0'
99
119
  - !ruby/object:Gem::Dependency
100
120
  name: rspec
101
121
  requirement: !ruby/object:Gem::Requirement
@@ -111,29 +131,77 @@ dependencies:
111
131
  - !ruby/object:Gem::Version
112
132
  version: '3.0'
113
133
  - !ruby/object:Gem::Dependency
114
- name: pry
134
+ name: rubocop
115
135
  requirement: !ruby/object:Gem::Requirement
116
136
  requirements:
117
137
  - - "~>"
118
138
  - !ruby/object:Gem::Version
119
- version: 0.12.2
139
+ version: 1.20.0
120
140
  type: :development
121
141
  prerelease: false
122
142
  version_requirements: !ruby/object:Gem::Requirement
123
143
  requirements:
124
144
  - - "~>"
125
145
  - !ruby/object:Gem::Version
126
- version: 0.12.2
127
- description:
146
+ version: 1.20.0
147
+ - !ruby/object:Gem::Dependency
148
+ name: rubocop-rspec
149
+ requirement: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - "~>"
152
+ - !ruby/object:Gem::Version
153
+ version: 2.4.0
154
+ type: :development
155
+ prerelease: false
156
+ version_requirements: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - "~>"
159
+ - !ruby/object:Gem::Version
160
+ version: 2.4.0
161
+ - !ruby/object:Gem::Dependency
162
+ name: simplecov
163
+ requirement: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ type: :development
169
+ prerelease: false
170
+ version_requirements: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ - !ruby/object:Gem::Dependency
176
+ name: sinatra
177
+ requirement: !ruby/object:Gem::Requirement
178
+ requirements:
179
+ - - "~>"
180
+ - !ruby/object:Gem::Version
181
+ version: '2.0'
182
+ type: :development
183
+ prerelease: false
184
+ version_requirements: !ruby/object:Gem::Requirement
185
+ requirements:
186
+ - - "~>"
187
+ - !ruby/object:Gem::Version
188
+ version: '2.0'
189
+ description:
128
190
  email:
129
- - sre@madetech.com
191
+ - i@djw.me
130
192
  executables: []
131
193
  extensions: []
132
194
  extra_rdoc_files: []
133
195
  files:
196
+ - ".editorconfig"
197
+ - ".github/FUNDING.yml"
198
+ - ".github/dependabot.yml"
199
+ - ".github/workflows/test.yml"
134
200
  - ".gitignore"
135
201
  - ".rspec"
202
+ - ".rubocop.yml"
136
203
  - ".ruby-version"
204
+ - ".simplecov"
137
205
  - Gemfile
138
206
  - LICENSE.txt
139
207
  - README.md
@@ -141,17 +209,18 @@ files:
141
209
  - examples/app.rb
142
210
  - examples/config.ru
143
211
  - lib/sensible_logging.rb
212
+ - lib/sensible_logging/helpers/logger_io_wrap.rb
144
213
  - lib/sensible_logging/helpers/subdomain_parser.rb
145
214
  - lib/sensible_logging/middlewares/request_id.rb
146
215
  - lib/sensible_logging/middlewares/request_logger.rb
147
216
  - lib/sensible_logging/middlewares/tagged_logger.rb
148
217
  - lib/sensible_logging/version.rb
149
218
  - sensible_logging.gemspec
150
- homepage: https://github.com/madetech/sensible_logging
219
+ homepage: https://github.com/davidwinter/sensible_logging
151
220
  licenses:
152
221
  - MIT
153
222
  metadata: {}
154
- post_install_message:
223
+ post_install_message:
155
224
  rdoc_options: []
156
225
  require_paths:
157
226
  - lib
@@ -159,16 +228,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
159
228
  requirements:
160
229
  - - ">="
161
230
  - !ruby/object:Gem::Version
162
- version: '0'
231
+ version: '2.6'
163
232
  required_rubygems_version: !ruby/object:Gem::Requirement
164
233
  requirements:
165
234
  - - ">="
166
235
  - !ruby/object:Gem::Version
167
236
  version: '0'
168
237
  requirements: []
169
- rubyforge_project:
170
- rubygems_version: 2.7.3
171
- signing_key:
238
+ rubygems_version: 3.2.15
239
+ signing_key:
172
240
  specification_version: 4
173
241
  summary: Sensible logging defaults for your Sinatra app
174
242
  test_files: []