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 +4 -4
- data/.editorconfig +5 -0
- data/.github/FUNDING.yml +1 -0
- data/.github/dependabot.yml +8 -0
- data/.github/workflows/test.yml +27 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +15 -0
- data/.ruby-version +1 -1
- data/.simplecov +9 -0
- data/README.md +122 -16
- data/Rakefile +2 -0
- data/examples/app.rb +9 -3
- data/examples/config.ru +2 -1
- 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 +9 -4
- data/lib/sensible_logging/middlewares/tagged_logger.rb +38 -9
- data/lib/sensible_logging/version.rb +3 -1
- data/lib/sensible_logging.rb +51 -10
- data/sensible_logging.gemspec +16 -9
- metadata +99 -31
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fe336ff76caedb39e58602dbf02834da1421e6b0c446650c83f92d6b3c57b1c9
|
4
|
+
data.tar.gz: 45ba85d3a3b2809f94aa6b36c8269111d15c88a053fa63a056409c16dd4e7896
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 142f2b9467a123ab1222b54273a04831eb47b85f250fe4fc226d1d515d85390e96f6651f9072e2a450e123c4999a880bd67a2de048f3765b74699c3554df2298
|
7
|
+
data.tar.gz: 88dc78761416c8c0402f22bf1a871175268cef687a173a7b47a0b3459b6363bf1f92a5c35f4920ee7c39436beae2051307762d9f4ed781ce1f48cacc49f0691b
|
data/.editorconfig
ADDED
data/.github/FUNDING.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
github: [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
data/.rubocop.yml
ADDED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.6.1
|
data/.simplecov
ADDED
data/README.md
CHANGED
@@ -1,41 +1,147 @@
|
|
1
|
-
# Sensible
|
1
|
+
# Sensible Logging
|
2
2
|
|
3
|
-
|
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
|
-
|
5
|
+
> A logging extension with sensible defaults for Sinatra apps.
|
6
6
|
|
7
7
|
## Features
|
8
8
|
|
9
|
-
* Add (or use an existing
|
10
|
-
* Trim the request logs to the bare minimal (
|
11
|
-
*
|
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
|
-
|
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
|
-
|
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
|
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
|
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
|
-
|
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
|
-
|
143
|
+
## License
|
38
144
|
|
39
|
-
|
145
|
+
MIT
|
40
146
|
|
41
|
-
|
147
|
+
[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
|
-
logger: Logger.new(
|
11
|
-
log_tags: [
|
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.
|
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
@@ -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,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
|
-
|
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? && !
|
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.
|
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(
|
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
|
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
|
-
|
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
|
-
|
63
|
+
@tags.map do |tag|
|
35
64
|
tag.call(req)
|
36
65
|
end
|
37
66
|
end
|
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'
|
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
|
-
|
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
|
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
|
|
@@ -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 = ['
|
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/
|
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 '
|
26
|
-
spec.add_development_dependency '
|
27
|
-
spec.add_development_dependency '
|
28
|
-
spec.add_development_dependency '
|
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 '
|
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
|
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:
|
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:
|
50
|
+
name: bundler
|
31
51
|
requirement: !ruby/object:Gem::Requirement
|
32
52
|
requirements:
|
33
53
|
- - "~>"
|
34
54
|
- !ruby/object:Gem::Version
|
35
|
-
version:
|
36
|
-
type: :
|
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:
|
62
|
+
version: 2.2.0
|
43
63
|
- !ruby/object:Gem::Dependency
|
44
|
-
name:
|
64
|
+
name: codecov
|
45
65
|
requirement: !ruby/object:Gem::Requirement
|
46
66
|
requirements:
|
47
|
-
- - "
|
67
|
+
- - ">="
|
48
68
|
- !ruby/object:Gem::Version
|
49
|
-
version: '
|
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: '
|
76
|
+
version: '0'
|
57
77
|
- !ruby/object:Gem::Dependency
|
58
|
-
name:
|
78
|
+
name: pry
|
59
79
|
requirement: !ruby/object:Gem::Requirement
|
60
80
|
requirements:
|
61
81
|
- - "~>"
|
62
82
|
- !ruby/object:Gem::Version
|
63
|
-
version:
|
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:
|
90
|
+
version: 0.14.1
|
71
91
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
92
|
+
name: puma
|
73
93
|
requirement: !ruby/object:Gem::Requirement
|
74
94
|
requirements:
|
75
95
|
- - "~>"
|
76
96
|
- !ruby/object:Gem::Version
|
77
|
-
version: '
|
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: '
|
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: '
|
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: '
|
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:
|
134
|
+
name: rubocop
|
115
135
|
requirement: !ruby/object:Gem::Requirement
|
116
136
|
requirements:
|
117
137
|
- - "~>"
|
118
138
|
- !ruby/object:Gem::Version
|
119
|
-
version:
|
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:
|
127
|
-
|
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
|
-
-
|
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/
|
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: '
|
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
|
-
|
170
|
-
|
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: []
|