sensible_logging 0.3.0 → 0.4.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
  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: []