grape-middleware-logger 1.0.0 → 1.1.0
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/README.md +12 -4
- data/lib/grape/middleware/logger/version.rb +1 -1
- data/lib/grape/middleware/logger.rb +60 -64
- data/spec/lib/grape/middleware/logger_spec.rb +19 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bdd1d91790c08e781a650d7a86940ff36b134b34
|
4
|
+
data.tar.gz: 5ba7043cfc03c3f7f895069ae3d1c63d3a89e6ef
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ee6e3ed6f1f736358989522e1fe4f0ef66e60d2d35a30c5ae54eb073738db8ef1868b07ef76f6b583a9c36268946f4fc576d11709c81dc46d05aee5dde78a0f4
|
7
|
+
data.tar.gz: b365b76db8fcdbbf47f1cf871501bfc7f160d24747bc581bdae2651c13cc6befce54a9d55733cf129bbca32a9f0ab2628a754bfa9afed12b04e913a36c9303d1
|
data/README.md
CHANGED
@@ -17,14 +17,22 @@ gem 'grape-middleware-logger'
|
|
17
17
|
class API < Grape::API
|
18
18
|
use Grape::Middleware::Logger
|
19
19
|
end
|
20
|
-
```
|
21
|
-
|
20
|
+
```
|
21
|
+
|
22
|
+
#### Rails
|
23
|
+
Using Grape with Rails? `Rails.logger` will be used by default.
|
24
|
+
|
25
|
+
#### Custom setup
|
26
|
+
Want to customize the logging? You can provide a `logger` option.
|
27
|
+
|
28
|
+
Example using a CustomLogger and parameter sanitization:
|
22
29
|
```ruby
|
23
|
-
use Grape::Middleware::Logger, {
|
24
|
-
logger:
|
30
|
+
use Grape::Middleware::Logger, {
|
31
|
+
logger: CustomLogger.new,
|
25
32
|
filter: ActionDispatch::Http::ParameterFilter.new(Rails.application.config.filter_parameters)
|
26
33
|
}
|
27
34
|
```
|
35
|
+
The `logger` option can be any object that responds to `.info(msg)`
|
28
36
|
|
29
37
|
The `filter` option can be any object that responds to `.filter(params_hash)`
|
30
38
|
|
@@ -3,79 +3,75 @@ require 'grape'
|
|
3
3
|
|
4
4
|
# avoid superclass mismatch when version file gets loaded first
|
5
5
|
Grape::Middleware.send :remove_const, :Logger if defined? Grape::Middleware::Logger
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
logger.info %Q(Started #{env['grape.request'].request_method} "#{env['grape.request'].path}")
|
15
|
-
logger.info %Q( Parameters: #{parameters})
|
16
|
-
end
|
6
|
+
class Grape::Middleware::Logger < Grape::Middleware::Globals
|
7
|
+
def before
|
8
|
+
start_time
|
9
|
+
super # sets env['grape.*']
|
10
|
+
logger.info ''
|
11
|
+
logger.info %Q(Started #{env['grape.request'].request_method} "#{env['grape.request'].path}")
|
12
|
+
logger.info %Q( Parameters: #{parameters})
|
13
|
+
end
|
17
14
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
31
|
-
nil
|
32
|
-
end
|
33
|
-
if error
|
34
|
-
after_failure(error)
|
35
|
-
throw(:error, error)
|
36
|
-
else
|
37
|
-
after(@app_response.status)
|
38
|
-
end
|
39
|
-
@app_response
|
15
|
+
# @note Error and exception handling are required for the +after+ hooks
|
16
|
+
# Exceptions are logged as a 500 status and re-raised
|
17
|
+
# Other "errors" are caught, logged and re-thrown
|
18
|
+
def call!(env)
|
19
|
+
@env = env
|
20
|
+
before
|
21
|
+
error = catch(:error) do
|
22
|
+
begin
|
23
|
+
@app_response = @app.call(@env)
|
24
|
+
rescue => e
|
25
|
+
after_exception(e)
|
26
|
+
raise e
|
40
27
|
end
|
28
|
+
nil
|
29
|
+
end
|
30
|
+
if error
|
31
|
+
after_failure(error)
|
32
|
+
throw(:error, error)
|
33
|
+
else
|
34
|
+
after(@app_response.status)
|
35
|
+
end
|
36
|
+
@app_response
|
37
|
+
end
|
41
38
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
39
|
+
def after(status)
|
40
|
+
logger.info "Completed #{status} in #{((Time.now - start_time) * 1000).round(2)}ms"
|
41
|
+
logger.info ''
|
42
|
+
end
|
46
43
|
|
47
|
-
|
48
|
-
|
49
|
-
|
44
|
+
#
|
45
|
+
# Helpers
|
46
|
+
#
|
50
47
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
48
|
+
def after_exception(e)
|
49
|
+
logger.info %Q( Error: #{e.message})
|
50
|
+
after(500)
|
51
|
+
end
|
55
52
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
53
|
+
def after_failure(error)
|
54
|
+
logger.info %Q( Error: #{error[:message]}) if error[:message]
|
55
|
+
after(error[:status])
|
56
|
+
end
|
60
57
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
58
|
+
def parameters
|
59
|
+
request_params = env['grape.request.params'].to_hash
|
60
|
+
request_params.merge!(env['action_dispatch.request.request_parameters'] || {}) # for Rails
|
61
|
+
if @options[:filter]
|
62
|
+
@options[:filter].filter(request_params)
|
63
|
+
else
|
64
|
+
request_params
|
65
|
+
end
|
66
|
+
end
|
70
67
|
|
71
|
-
|
72
|
-
|
73
|
-
|
68
|
+
def start_time
|
69
|
+
@start_time ||= Time.now
|
70
|
+
end
|
74
71
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
end
|
72
|
+
def logger
|
73
|
+
@logger ||= @options[:logger]
|
74
|
+
@logger ||= defined?(Rails) && Rails.logger.present? ? Rails.logger : Logger.new(STDOUT)
|
79
75
|
end
|
80
76
|
end
|
81
77
|
|
@@ -97,8 +97,24 @@ describe Grape::Middleware::Logger do
|
|
97
97
|
context 'when @options[:logger] is nil' do
|
98
98
|
let(:options) { {} }
|
99
99
|
|
100
|
-
|
101
|
-
|
100
|
+
context 'when Rails is defined' do
|
101
|
+
module Rails
|
102
|
+
class << self
|
103
|
+
attr_accessor :logger
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
it 'defaults to the the standard Logger' do
|
108
|
+
expect(subject.logger).to be_a(Logger)
|
109
|
+
end
|
110
|
+
|
111
|
+
context 'when Rails.logger is defined' do
|
112
|
+
before { Rails.logger = double('rails_logger') }
|
113
|
+
|
114
|
+
it 'sets @logger to Rails.logger' do
|
115
|
+
expect(subject.logger).to be Rails.logger
|
116
|
+
end
|
117
|
+
end
|
102
118
|
end
|
103
119
|
end
|
104
120
|
|
@@ -125,8 +141,7 @@ describe Grape::Middleware::Logger do
|
|
125
141
|
#
|
126
142
|
# Test class
|
127
143
|
#
|
128
|
-
|
129
|
-
ParamFilter = Class.new do
|
144
|
+
class ParamFilter
|
130
145
|
def filter(opts)
|
131
146
|
opts.each_pair { |key, val| val[0..-1] = '[FILTERED]' if key == 'password' }
|
132
147
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-middleware-logger
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Buckley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-10-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grape
|