grape_logging 1.7.0 → 1.8.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +77 -3
- data/grape_logging.gemspec +1 -0
- data/lib/grape_logging.rb +1 -0
- data/lib/grape_logging/formatters/json.rb +1 -1
- data/lib/grape_logging/formatters/logstash.rb +1 -1
- data/lib/grape_logging/formatters/rails.rb +59 -0
- data/lib/grape_logging/loggers/filter_parameters.rb +1 -1
- data/lib/grape_logging/loggers/request_headers.rb +0 -1
- data/lib/grape_logging/util/parameter_filter.rb +14 -4
- data/lib/grape_logging/version.rb +1 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d9792108b8ff9d35fc3004f21fbf23ea8dc91f5ad94759c8ce03e9e2e24544cc
|
4
|
+
data.tar.gz: c1994437d15c8fe42c543911757b89ddf799acd00baa6a8b7e9b97ba26af805a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 760d3d7f0ea911e31ab5f43fb8fe3e030d8c8a295514990b6c66000e85a0e9ad302fe443f82d48d9e6f9458a8b92dcff74afe4af691048a5f390d7e8884cc200
|
7
|
+
data.tar.gz: 39a06694b3fc24691efad563641e9664d84623793e06c3586d9e3e8e859c4b8db3d0c761c907620f78ac1ad6eebbddd1f40fb23512c315a8cbddea62ec0e7bcf
|
data/README.md
CHANGED
@@ -33,11 +33,83 @@ use GrapeLogging::Middleware::RequestLogger, { logger: logger }
|
|
33
33
|
|
34
34
|
### Log Format
|
35
35
|
|
36
|
-
|
36
|
+
There are formatters provided for you, or you can provide your own.
|
37
|
+
|
38
|
+
#### `GrapeLogging::Formatters::Default`
|
39
|
+
|
40
|
+
[2015-04-16 12:52:12 +0200] INFO -- 200 -- total=2.06 db=0.36 -- PATCH /api/endpoint params={"some_param"=>{"value_1"=>"123", "value_2"=>"456"}}
|
41
|
+
|
42
|
+
#### `GrapeLogging::Formatters::Json`
|
43
|
+
|
44
|
+
```json
|
45
|
+
{
|
46
|
+
"date": "2015-04-16 12:52:12+0200",
|
47
|
+
"severity": "INFO",
|
48
|
+
"data": {
|
49
|
+
"status": 200,
|
50
|
+
"time": {
|
51
|
+
"total": 2.06,
|
52
|
+
"db": 0.36,
|
53
|
+
"view": 1.70
|
54
|
+
},
|
55
|
+
"method": "PATCH",
|
56
|
+
"path": "/api/endpoint",
|
57
|
+
"params": {
|
58
|
+
"value_1": "123",
|
59
|
+
"value_2": "456"
|
60
|
+
},
|
61
|
+
"host": "localhost"
|
62
|
+
}
|
63
|
+
}
|
64
|
+
```
|
65
|
+
|
66
|
+
#### `GrapeLogging::Formatters::Lograge`
|
67
|
+
|
68
|
+
severity="INFO", duration=2.06, db=0.36, view=1.70, datetime="2015-04-16 12:52:12+0200", status=200, method="PATCH", path="/api/endpoint", params={}, host="localhost"
|
69
|
+
|
70
|
+
#### `GrapeLogging::Formatters::Logstash`
|
71
|
+
|
72
|
+
```json
|
73
|
+
{
|
74
|
+
"@timestamp": "2015-04-16 12:52:12+0200",
|
75
|
+
"severity": "INFO",
|
76
|
+
"status": 200,
|
77
|
+
"time": {
|
78
|
+
"total": 2.06,
|
79
|
+
"db": 0.36,
|
80
|
+
"view": 1.70
|
81
|
+
},
|
82
|
+
"method": "PATCH",
|
83
|
+
"path": "/api/endpoint",
|
84
|
+
"params": {
|
85
|
+
"value_1": "123",
|
86
|
+
"value_2": "456"
|
87
|
+
},
|
88
|
+
"host": "localhost"
|
89
|
+
}
|
90
|
+
```
|
37
91
|
|
38
|
-
|
92
|
+
#### `GrapeLogging::Formatters::Rails`
|
39
93
|
|
40
|
-
|
94
|
+
Rails will print the "Started..." line:
|
95
|
+
|
96
|
+
Started GET "/api/endpoint" for ::1 at 2015-04-16 12:52:12 +0200
|
97
|
+
User Load (0.7ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1
|
98
|
+
...
|
99
|
+
|
100
|
+
The `Rails` formatter adds the last line of the request, like a standard Rails request:
|
101
|
+
|
102
|
+
Completed 200 OK in 349ms (Views: 250.1ms | DB: 98.63ms)
|
103
|
+
|
104
|
+
#### Custom
|
105
|
+
|
106
|
+
You can provide your own class that implements the `call` method returning a `String`:
|
107
|
+
|
108
|
+
```ruby
|
109
|
+
def call(severity, datetime, _, data)
|
110
|
+
...
|
111
|
+
end
|
112
|
+
```
|
41
113
|
|
42
114
|
You can change the formatter like so
|
43
115
|
```ruby
|
@@ -46,6 +118,8 @@ class MyAPI < Grape::API
|
|
46
118
|
end
|
47
119
|
```
|
48
120
|
|
121
|
+
If you prefer some other format I strongly encourage you to do pull request with new formatter class ;)
|
122
|
+
|
49
123
|
### Customising What Is Logged
|
50
124
|
|
51
125
|
You can include logging of other parts of the request / response cycle by including subclasses of `GrapeLogging::Loggers::Base`
|
data/grape_logging.gemspec
CHANGED
data/lib/grape_logging.rb
CHANGED
@@ -4,6 +4,7 @@ require 'grape_logging/formatters/default'
|
|
4
4
|
require 'grape_logging/formatters/json'
|
5
5
|
require 'grape_logging/formatters/lograge'
|
6
6
|
require 'grape_logging/formatters/logstash'
|
7
|
+
require 'grape_logging/formatters/rails'
|
7
8
|
require 'grape_logging/loggers/base'
|
8
9
|
require 'grape_logging/loggers/response'
|
9
10
|
require 'grape_logging/loggers/filter_parameters'
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'rack/utils'
|
2
|
+
|
3
|
+
module GrapeLogging
|
4
|
+
module Formatters
|
5
|
+
class Rails
|
6
|
+
|
7
|
+
def call(severity, datetime, _, data)
|
8
|
+
if data.is_a?(String)
|
9
|
+
"#{severity[0..0]} [#{datetime}] #{severity} -- : #{data}\n"
|
10
|
+
elsif data.is_a?(Exception)
|
11
|
+
"#{severity[0..0]} [#{datetime}] #{severity} -- : #{format_exception(data)}\n"
|
12
|
+
elsif data.is_a?(Hash)
|
13
|
+
format_hash(data)
|
14
|
+
else
|
15
|
+
"#{data.inspect}\n"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def format_exception(exception)
|
22
|
+
backtrace_array = (exception.backtrace || []).map { |line| "\t#{line}" }
|
23
|
+
|
24
|
+
[
|
25
|
+
"#{exception.message} (#{exception.class})",
|
26
|
+
backtrace_array.join("\n")
|
27
|
+
].reject{|line| line == ""}.join("\n")
|
28
|
+
end
|
29
|
+
|
30
|
+
def format_hash(hash)
|
31
|
+
# Create Rails' single summary line at the end of every request, formatted like:
|
32
|
+
# Completed 200 OK in 958ms (Views: 951.1ms | ActiveRecord: 3.8ms)
|
33
|
+
# See: actionpack/lib/action_controller/log_subscriber.rb
|
34
|
+
|
35
|
+
message = ""
|
36
|
+
additions = []
|
37
|
+
status = hash.delete(:status)
|
38
|
+
params = hash.delete(:params)
|
39
|
+
|
40
|
+
total_time = hash[:time] && hash[:time][:total] && hash[:time][:total].round(2)
|
41
|
+
view_time = hash[:time] && hash[:time][:view] && hash[:time][:view].round(2)
|
42
|
+
db_time = hash[:time] && hash[:time][:db] && hash[:time][:db].round(2)
|
43
|
+
|
44
|
+
additions << "Views: #{view_time}ms" if view_time
|
45
|
+
additions << "DB: #{db_time}ms" if db_time
|
46
|
+
|
47
|
+
message << " Parameters: #{params.inspect}\n" if params
|
48
|
+
|
49
|
+
message << "Completed #{status} #{::Rack::Utils::HTTP_STATUS_CODES[status]} in #{total_time}ms"
|
50
|
+
message << " (#{additions.join(" | ".freeze)})" if additions.size > 0
|
51
|
+
message << "\n"
|
52
|
+
message << "\n" if defined?(::Rails.env) && ::Rails.env.development?
|
53
|
+
|
54
|
+
message
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -4,7 +4,7 @@ module GrapeLogging
|
|
4
4
|
AD_PARAMS = 'action_dispatch.request.parameters'.freeze
|
5
5
|
|
6
6
|
def initialize(filter_parameters = nil, replacement = nil, exceptions = %w(controller action format))
|
7
|
-
@filter_parameters = filter_parameters || (defined?(Rails.application) ? Rails.application.config.filter_parameters : [])
|
7
|
+
@filter_parameters = filter_parameters || (defined?(::Rails.application) ? ::Rails.application.config.filter_parameters : [])
|
8
8
|
@replacement = replacement || '[FILTERED]'
|
9
9
|
@exceptions = exceptions
|
10
10
|
end
|
@@ -1,7 +1,17 @@
|
|
1
|
-
if defined?(Rails.application)
|
2
|
-
|
3
|
-
|
4
|
-
|
1
|
+
if defined?(::Rails.application)
|
2
|
+
if Gem::Version.new(Rails.version) < Gem::Version.new('6.0.0')
|
3
|
+
class ParameterFilter < ActionDispatch::Http::ParameterFilter
|
4
|
+
def initialize(_replacement, filter_parameters)
|
5
|
+
super(filter_parameters)
|
6
|
+
end
|
7
|
+
end
|
8
|
+
else
|
9
|
+
require "active_support/parameter_filter"
|
10
|
+
|
11
|
+
class ParameterFilter < ActiveSupport::ParameterFilter
|
12
|
+
def initialize(_replacement, filter_parameters)
|
13
|
+
super(filter_parameters)
|
14
|
+
end
|
5
15
|
end
|
6
16
|
end
|
7
17
|
else
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape_logging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- aserafin
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: grape
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rack
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -103,6 +117,7 @@ files:
|
|
103
117
|
- lib/grape_logging/formatters/json.rb
|
104
118
|
- lib/grape_logging/formatters/lograge.rb
|
105
119
|
- lib/grape_logging/formatters/logstash.rb
|
120
|
+
- lib/grape_logging/formatters/rails.rb
|
106
121
|
- lib/grape_logging/loggers/base.rb
|
107
122
|
- lib/grape_logging/loggers/client_env.rb
|
108
123
|
- lib/grape_logging/loggers/filter_parameters.rb
|
@@ -134,8 +149,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
134
149
|
- !ruby/object:Gem::Version
|
135
150
|
version: '0'
|
136
151
|
requirements: []
|
137
|
-
|
138
|
-
rubygems_version: 2.5.1
|
152
|
+
rubygems_version: 3.1.2
|
139
153
|
signing_key:
|
140
154
|
specification_version: 4
|
141
155
|
summary: Out of the box request logging for Grape!
|