sensible_logging 0.1.0 → 0.4.2

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: 573a3b8040fec85373dc5f2a00a82655e51ebe08d28b31c1a4dbfa3f18b0147f
4
- data.tar.gz: 4d7d894842e36853317062862cd99577d9f61b78ad73fbbe909315ff14f8ecd6
3
+ metadata.gz: 9e38e81bacc78dc2cab4f5883bda17d8046982278eeff8f26b24e083439de8e7
4
+ data.tar.gz: 1043a629d3441cd7058b5be4545bae2abb06ec094d68fcfaa9e9604068f1e044
5
5
  SHA512:
6
- metadata.gz: a8dea52bb2451b3bdcdce68b1ff75f5cfaa385b2321d9027b687f5b8bd27c5cef56d68fa197081a79cc0b4c11303e706867ad3ba6dd3ddba07c2f89b0a3f5004
7
- data.tar.gz: 6b1ebcc33d6b13a5e4ce19307d538f4387ccfbd0e5cf5dcbc45d4729786e7ea2f41f917e80bed39d8c4b7aadf521aacb60e49061a23737581d23cfe907baac44
6
+ metadata.gz: 53f1b8eec5fcbb81457253943e1367bd3393e81955971e1a17ceee61df5594b2072407a51ca903c7e70605eff30d5855f55634251a2874a8217db0b2a46248ee
7
+ data.tar.gz: 15446e3ae903c6a5506e2af6a6f438da7ead8087456d89cf504ddfa4c4471f0218b6d9f57a099f443c78fc80192c0f56b81ea1b669d46b5c768cfc4c67e481b1
@@ -0,0 +1 @@
1
+ github: [davidwinter]
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "bundler"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "daily"
@@ -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,148 @@
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) [![Gem](https://img.shields.io/gem/dtv/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
136
+ 3. Create a new PR with this change and once approved, merge to `main`
137
+ 4. Create a new PR with changes in `main` to be merged into `stable` since the last release
138
+ 5. Once approved and merged in, locally, run: `bundle exec rake release` which will build and push the new gem to Rubygems
139
+
140
+ ## Authors
34
141
 
35
- ## Using
142
+ By [David Winter](https://github.com/davidwinter) with contributions from [Mark Sta Ana](https://github.com/booyaa) & [Anthony King](https://github.com/cybojenix)
36
143
 
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.
144
+ ## License
38
145
 
39
- ## Todo
146
+ MIT
40
147
 
41
- Need to ensure `sensible_logging` confirms to all of the relevant `productionisation` checklist items. Pretty much there though.
148
+ [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 ADDED
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sinatra/base'
4
+ require 'logger'
5
+
6
+ require_relative '../lib/sensible_logging'
7
+
8
+ # Example Sinatra app
9
+ class App < Sinatra::Base
10
+ register Sinatra::SensibleLogging
11
+
12
+ sensible_logging(
13
+ logger: Logger.new($stdout),
14
+ log_tags: [->(req) { [req.port] }],
15
+ exclude_params: ['two']
16
+ )
17
+
18
+ configure do
19
+ set :log_level, Logger::DEBUG
20
+ end
21
+
22
+ configure :production do
23
+ set :log_level, Logger::INFO
24
+ end
25
+
26
+ get '/hello' do
27
+ logger.tagged('todo') do |logger|
28
+ logger.debug('test')
29
+ env['rack.errors'].puts('This is an example error')
30
+ end
31
+ 'test'
32
+ end
33
+
34
+ post '/' do
35
+ logger.debug('posting')
36
+ 'posted'
37
+ end
38
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './app'
4
+
5
+ run App
@@ -1,18 +1,71 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sinatra/base'
4
+
1
5
  require_relative './sensible_logging/middlewares/request_id'
2
6
  require_relative './sensible_logging/middlewares/tagged_logger'
3
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
18
+
19
+ # Sinatra extension
20
+ module Sinatra
21
+ # Sensible logging library for Sinatra based Apps
22
+ module SensibleLogging
23
+ def sensible_logging( # rubocop:disable Metrics/MethodLength, Metrics/ParameterLists
24
+ logger: Logger.new($stdout),
25
+ log_tags: [],
26
+ use_default_log_tags: true,
27
+ exclude_params: [],
28
+ tld_length: 1,
29
+ include_log_severity: true
30
+ )
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
+ )
39
+
40
+ before do
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?
44
+ end
45
+ end
4
46
 
5
- def sensible_logging(app:, logger:, log_tags: [], exclude_params: [], tld_length: 1)
6
- use RequestId
7
- use TaggedLogger, logger, log_tags, tld_length
8
- use RequestLogger, exclude_params
47
+ private
9
48
 
10
- app.before do
11
- env['rack.errors'] = env['rack.logger'] = env['logger']
12
- if app.settings.log_level != nil
13
- logger.level = app.settings.log_level
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
14
67
  end
15
68
  end
16
69
 
17
- app
70
+ register SensibleLogging
18
71
  end
@@ -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
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Returns subdomains from a full qualified domain name
4
+ class SubdomainParser
5
+ attr_reader :tld_length
6
+
7
+ def initialize(tld_length: 1)
8
+ @tld_length = tld_length
9
+ end
10
+
11
+ def parse(host)
12
+ domain_parts = host.split('.')
13
+
14
+ return domain_parts[0] if domain_parts.size == 1
15
+
16
+ main_domain_length = tld_length + 1
17
+ subdomain_length = domain_parts.size - main_domain_length
18
+
19
+ subdomain_parts = domain_parts[0...subdomain_length]
20
+
21
+ return nil if subdomain_parts.empty?
22
+
23
+ subdomain_parts.join('.')
24
+ end
25
+ 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'
5
+ require_relative '../helpers/subdomain_parser'
2
6
 
7
+ # Allow custom tags to be captured
3
8
  class TaggedLogger
4
- def initialize(app, logger = Logger.new(STDOUT), tags = [], tld_length = 1)
9
+ def initialize( # rubocop:disable Metrics/MethodLength
10
+ app,
11
+ options = {}
12
+ )
5
13
  @app = app
6
- @logger = ActiveSupport::TaggedLogging.new(logger)
7
14
 
8
- @tags = tags
9
- @tags = default_tags if tags.empty?
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]
10
24
 
11
- @tld_length = tld_length
25
+ @logger = ActiveSupport::TaggedLogging.new(options[:logger])
26
+ @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)
@@ -18,26 +35,32 @@ class TaggedLogger
18
35
  end
19
36
  end
20
37
 
21
- def default_tags
22
- [lambda { |req|
23
- [subdomain(req), ENV['RACK_ENV'], req.env['request_id']]
24
- }]
25
- end
26
-
27
38
  private
28
39
 
29
- def subdomain(req)
30
- domain_parts = req.host.split('.')
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
31
47
 
32
- main_domain_length = @tld_length + 1
33
- subdomain_length = domain_parts.length - main_domain_length
48
+ def default_tags(tld_length: 1)
49
+ [lambda { |req|
50
+ [subdomain(req.host, tld_length) || 'n/a', ENV['RACK_ENV'], req.env['request_id']]
51
+ }]
52
+ end
34
53
 
35
- domain_parts[0...subdomain_length].join('.')
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)
36
59
  end
37
60
 
38
61
  def generate_tags(env)
39
62
  req = Rack::Request.new(env)
40
- tags = @tags.map do |tag|
63
+ @tags.map do |tag|
41
64
  tag.call(req)
42
65
  end
43
66
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SensibleLogging
2
- VERSION = "0.1.0"
4
+ VERSION = '0.4.2'
3
5
  end
@@ -1,31 +1,38 @@
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
 
6
7
  Gem::Specification.new do |spec|
7
8
  spec.name = 'sensible_logging'
8
9
  spec.version = SensibleLogging::VERSION
9
- spec.authors = ['David Winter', 'Mark Sta Ana']
10
- spec.email = ['sre@madetech.com']
10
+ spec.authors = ['David Winter', 'Mark Sta Ana', 'Anthony King']
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
 
22
- spec.add_runtime_dependency 'rack', '~> 2.0'
23
25
  spec.add_runtime_dependency 'activesupport', '~> 5.2'
26
+ spec.add_runtime_dependency 'rack', '~> 2.0'
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', '~> 12.3'
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.16.1'
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,100 +1,115 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sensible_logging
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Winter
8
8
  - Mark Sta Ana
9
- autorequire:
9
+ - Anthony King
10
+ autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2019-01-07 00:00:00.000000000 Z
13
+ date: 2021-06-14 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
- name: rack
16
+ name: activesupport
16
17
  requirement: !ruby/object:Gem::Requirement
17
18
  requirements:
18
19
  - - "~>"
19
20
  - !ruby/object:Gem::Version
20
- version: '2.0'
21
+ version: '5.2'
21
22
  type: :runtime
22
23
  prerelease: false
23
24
  version_requirements: !ruby/object:Gem::Requirement
24
25
  requirements:
25
26
  - - "~>"
26
27
  - !ruby/object:Gem::Version
27
- version: '2.0'
28
+ version: '5.2'
28
29
  - !ruby/object:Gem::Dependency
29
- name: activesupport
30
+ name: rack
30
31
  requirement: !ruby/object:Gem::Requirement
31
32
  requirements:
32
33
  - - "~>"
33
34
  - !ruby/object:Gem::Version
34
- version: '5.2'
35
+ version: '2.0'
35
36
  type: :runtime
36
37
  prerelease: false
37
38
  version_requirements: !ruby/object:Gem::Requirement
38
39
  requirements:
39
40
  - - "~>"
40
41
  - !ruby/object:Gem::Version
41
- version: '5.2'
42
+ version: '2.0'
42
43
  - !ruby/object:Gem::Dependency
43
- name: sinatra
44
+ name: bundler
44
45
  requirement: !ruby/object:Gem::Requirement
45
46
  requirements:
46
47
  - - "~>"
47
48
  - !ruby/object:Gem::Version
48
- version: '2.0'
49
+ version: 2.2.0
49
50
  type: :development
50
51
  prerelease: false
51
52
  version_requirements: !ruby/object:Gem::Requirement
52
53
  requirements:
53
54
  - - "~>"
54
55
  - !ruby/object:Gem::Version
55
- version: '2.0'
56
+ version: 2.2.0
56
57
  - !ruby/object:Gem::Dependency
57
- name: puma
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
58
73
  requirement: !ruby/object:Gem::Requirement
59
74
  requirements:
60
75
  - - "~>"
61
76
  - !ruby/object:Gem::Version
62
- version: '3.12'
77
+ version: 0.14.1
63
78
  type: :development
64
79
  prerelease: false
65
80
  version_requirements: !ruby/object:Gem::Requirement
66
81
  requirements:
67
82
  - - "~>"
68
83
  - !ruby/object:Gem::Version
69
- version: '3.12'
84
+ version: 0.14.1
70
85
  - !ruby/object:Gem::Dependency
71
- name: bundler
86
+ name: puma
72
87
  requirement: !ruby/object:Gem::Requirement
73
88
  requirements:
74
89
  - - "~>"
75
90
  - !ruby/object:Gem::Version
76
- version: '1.16'
91
+ version: '5.3'
77
92
  type: :development
78
93
  prerelease: false
79
94
  version_requirements: !ruby/object:Gem::Requirement
80
95
  requirements:
81
96
  - - "~>"
82
97
  - !ruby/object:Gem::Version
83
- version: '1.16'
98
+ version: '5.3'
84
99
  - !ruby/object:Gem::Dependency
85
100
  name: rake
86
101
  requirement: !ruby/object:Gem::Requirement
87
102
  requirements:
88
103
  - - "~>"
89
104
  - !ruby/object:Gem::Version
90
- version: '10.0'
105
+ version: '12.3'
91
106
  type: :development
92
107
  prerelease: false
93
108
  version_requirements: !ruby/object:Gem::Requirement
94
109
  requirements:
95
110
  - - "~>"
96
111
  - !ruby/object:Gem::Version
97
- version: '10.0'
112
+ version: '12.3'
98
113
  - !ruby/object:Gem::Dependency
99
114
  name: rspec
100
115
  requirement: !ruby/object:Gem::Requirement
@@ -110,46 +125,95 @@ dependencies:
110
125
  - !ruby/object:Gem::Version
111
126
  version: '3.0'
112
127
  - !ruby/object:Gem::Dependency
113
- name: pry
128
+ name: rubocop
114
129
  requirement: !ruby/object:Gem::Requirement
115
130
  requirements:
116
131
  - - "~>"
117
132
  - !ruby/object:Gem::Version
118
- version: 0.12.2
133
+ version: 1.16.1
119
134
  type: :development
120
135
  prerelease: false
121
136
  version_requirements: !ruby/object:Gem::Requirement
122
137
  requirements:
123
138
  - - "~>"
124
139
  - !ruby/object:Gem::Version
125
- version: 0.12.2
126
- description:
140
+ version: 1.16.1
141
+ - !ruby/object:Gem::Dependency
142
+ name: rubocop-rspec
143
+ requirement: !ruby/object:Gem::Requirement
144
+ requirements:
145
+ - - "~>"
146
+ - !ruby/object:Gem::Version
147
+ version: 2.4.0
148
+ type: :development
149
+ prerelease: false
150
+ version_requirements: !ruby/object:Gem::Requirement
151
+ requirements:
152
+ - - "~>"
153
+ - !ruby/object:Gem::Version
154
+ version: 2.4.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'
183
+ description:
127
184
  email:
128
- - sre@madetech.com
185
+ - i@djw.me
129
186
  executables: []
130
187
  extensions: []
131
188
  extra_rdoc_files: []
132
189
  files:
190
+ - ".github/FUNDING.yml"
191
+ - ".github/dependabot.yml"
192
+ - ".github/workflows/test.yml"
133
193
  - ".gitignore"
134
194
  - ".rspec"
195
+ - ".rubocop.yml"
135
196
  - ".ruby-version"
197
+ - ".simplecov"
136
198
  - Gemfile
137
199
  - LICENSE.txt
138
200
  - README.md
139
201
  - Rakefile
140
- - app.rb
141
- - config.ru
202
+ - examples/app.rb
203
+ - examples/config.ru
142
204
  - lib/sensible_logging.rb
205
+ - lib/sensible_logging/helpers/logger_io_wrap.rb
206
+ - lib/sensible_logging/helpers/subdomain_parser.rb
143
207
  - lib/sensible_logging/middlewares/request_id.rb
144
208
  - lib/sensible_logging/middlewares/request_logger.rb
145
209
  - lib/sensible_logging/middlewares/tagged_logger.rb
146
210
  - lib/sensible_logging/version.rb
147
211
  - sensible_logging.gemspec
148
- homepage: https://github.com/madetech/sensible_logging
212
+ homepage: https://github.com/davidwinter/sensible_logging
149
213
  licenses:
150
214
  - MIT
151
215
  metadata: {}
152
- post_install_message:
216
+ post_install_message:
153
217
  rdoc_options: []
154
218
  require_paths:
155
219
  - lib
@@ -157,16 +221,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
157
221
  requirements:
158
222
  - - ">="
159
223
  - !ruby/object:Gem::Version
160
- version: '0'
224
+ version: '2.6'
161
225
  required_rubygems_version: !ruby/object:Gem::Requirement
162
226
  requirements:
163
227
  - - ">="
164
228
  - !ruby/object:Gem::Version
165
229
  version: '0'
166
230
  requirements: []
167
- rubyforge_project:
168
- rubygems_version: 2.7.3
169
- signing_key:
231
+ rubygems_version: 3.2.15
232
+ signing_key:
170
233
  specification_version: 4
171
234
  summary: Sensible logging defaults for your Sinatra app
172
235
  test_files: []
data/app.rb DELETED
@@ -1,22 +0,0 @@
1
- require 'sinatra/base'
2
- require 'logger'
3
-
4
- class App < Sinatra::Base
5
- configure do
6
- set :log_level, Logger::DEBUG
7
- end
8
-
9
- configure :production do
10
- set :log_level, Logger::INFO
11
- end
12
-
13
- get '/hello' do
14
- logger.debug('test')
15
- 'test'
16
- end
17
-
18
- post '/' do
19
- logger.debug('posting')
20
- 'posted'
21
- end
22
- end
data/config.ru DELETED
@@ -1,11 +0,0 @@
1
- #\ --quiet
2
- require 'logger'
3
- require './app'
4
- require './lib/sensible_logging'
5
-
6
- run sensible_logging(
7
- app: App,
8
- logger: Logger.new(STDOUT),
9
- log_tags: TaggedLogger.default_tags + [lambda { |req| [req.port] }],
10
- exclude_params: ['two']
11
- )