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 +4 -4
- data/.circleci/config.yml +4 -2
- data/.gitignore +1 -0
- data/.rubocop.yml +8 -0
- data/.ruby-version +1 -1
- data/.simplecov +7 -0
- data/README.md +71 -20
- data/Rakefile +2 -0
- data/examples/app.rb +8 -2
- data/examples/config.ru +2 -1
- data/lib/sensible_logging.rb +50 -9
- data/lib/sensible_logging/helpers/logger_io_wrap.rb +23 -0
- data/lib/sensible_logging/helpers/subdomain_parser.rb +4 -1
- data/lib/sensible_logging/middlewares/request_id.rb +3 -0
- data/lib/sensible_logging/middlewares/request_logger.rb +6 -3
- data/lib/sensible_logging/middlewares/tagged_logger.rb +24 -4
- data/lib/sensible_logging/version.rb +3 -1
- data/sensible_logging.gemspec +11 -6
- metadata +81 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a3b74510253681a9999278535633d1297f065418722947adab13556809eff9a
|
4
|
+
data.tar.gz: ea8e280d74e25f055ccb30fea6c5adbe87154e5b67e2ded25a2b0c87365f5bea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ffa0e0f617c0a8725b06ab70e44735206c7e88001912ccaa2b150e92ce27877af0fa4cc1cbfecaa96c1b1ce1cf433c98184a106233ec9a75cc5ffaffb188e782
|
7
|
+
data.tar.gz: 3f5758087a70913f9aeb4bd52c8fbd6177e316712cd8e70d41eabd3f55247964e4cc73d4174b2c238316daa3c732dbaa2ae6ebfb9eda27aff39a2c144864f497
|
data/.circleci/config.yml
CHANGED
@@ -2,16 +2,18 @@ version: 2
|
|
2
2
|
jobs:
|
3
3
|
build_and_test:
|
4
4
|
docker:
|
5
|
-
- image: circleci/ruby:2.
|
5
|
+
- image: circleci/ruby:2.6.1
|
6
6
|
environment:
|
7
|
-
|
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
data/.rubocop.yml
ADDED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.6.1
|
data/.simplecov
ADDED
data/README.md
CHANGED
@@ -1,13 +1,14 @@
|
|
1
|
-
# Sensible
|
1
|
+
# Sensible Logging
|
2
2
|
|
3
|
-
[](https://circleci.com/gh/madetech/sensible_logging)
|
3
|
+
[](https://circleci.com/gh/madetech/sensible_logging)
|
4
|
+
[](https://codecov.io/gh/madetech/sensible_logging)
|
5
|
+
[](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`
|
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
|
-
*
|
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
|
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
|
-
|
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
|
-
|
32
|
-
|
44
|
+
```ruby
|
45
|
+
require 'sensible_logging'
|
33
46
|
|
34
|
-
|
35
|
-
|
36
|
-
)
|
47
|
+
class App < Sinatra::Base
|
48
|
+
register Sinatra::SensibleLogging
|
37
49
|
|
38
|
-
#
|
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
|
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
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
13
|
logger: Logger.new(STDOUT),
|
11
|
-
log_tags: [
|
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.
|
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
data/lib/sensible_logging.rb
CHANGED
@@ -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
|
-
|
17
|
-
|
18
|
-
|
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.
|
22
|
-
|
23
|
-
|
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.
|
21
|
+
return nil if subdomain_parts.empty?
|
19
22
|
|
20
23
|
subdomain_parts.join('.')
|
21
24
|
end
|
@@ -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? && !
|
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.
|
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(
|
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
|
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
|
-
|
59
|
+
@tags.map do |tag|
|
40
60
|
tag.call(req)
|
41
61
|
end
|
42
62
|
end
|
data/sensible_logging.gemspec
CHANGED
@@ -1,5 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
|
-
lib = File.expand_path('
|
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 '
|
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 '
|
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 '
|
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.
|
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-
|
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:
|
44
|
+
name: bundler
|
31
45
|
requirement: !ruby/object:Gem::Requirement
|
32
46
|
requirements:
|
33
47
|
- - "~>"
|
34
48
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
36
|
-
type: :
|
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:
|
56
|
+
version: 2.0.1
|
43
57
|
- !ruby/object:Gem::Dependency
|
44
|
-
name:
|
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:
|
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:
|
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:
|
100
|
+
name: rake
|
73
101
|
requirement: !ruby/object:Gem::Requirement
|
74
102
|
requirements:
|
75
103
|
- - "~>"
|
76
104
|
- !ruby/object:Gem::Version
|
77
|
-
version: '
|
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: '
|
112
|
+
version: '12.3'
|
85
113
|
- !ruby/object:Gem::Dependency
|
86
|
-
name:
|
114
|
+
name: rspec
|
87
115
|
requirement: !ruby/object:Gem::Requirement
|
88
116
|
requirements:
|
89
117
|
- - "~>"
|
90
118
|
- !ruby/object:Gem::Version
|
91
|
-
version: '
|
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: '
|
126
|
+
version: '3.0'
|
99
127
|
- !ruby/object:Gem::Dependency
|
100
|
-
name:
|
128
|
+
name: rubocop
|
101
129
|
requirement: !ruby/object:Gem::Requirement
|
102
130
|
requirements:
|
103
131
|
- - "~>"
|
104
132
|
- !ruby/object:Gem::Version
|
105
|
-
version:
|
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:
|
140
|
+
version: 0.65.0
|
113
141
|
- !ruby/object:Gem::Dependency
|
114
|
-
name:
|
142
|
+
name: rubocop-rspec
|
115
143
|
requirement: !ruby/object:Gem::Requirement
|
116
144
|
requirements:
|
117
145
|
- - "~>"
|
118
146
|
- !ruby/object:Gem::Version
|
119
|
-
version:
|
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:
|
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
|
-
|
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
|