pier_logging 0.2.0 → 0.2.5
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/lib/pier_logging.rb +9 -2
- data/lib/pier_logging/request_logger.rb +34 -6
- data/lib/pier_logging/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5b2a1b9430577ae2c662d051aa5e305f33aeff05655333e0112a73386beab712
|
4
|
+
data.tar.gz: b1cb0e6cb96dde62fac3c7ae240e3f56aa14df4df416929eb889b68df4a09ae3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ea2ebdf2a038bd3c0b9b76f0409c0e3abf05eab7b00d5934c9bcf7b461e2bee3a35af07788a62d87cf892f333141ae5658348237effb7d171c1feddd511826c
|
7
|
+
data.tar.gz: d2aefc5a1d51a288e541d80cefc0caf3f9794726b8860131cdfc320eeba0ea0deac035097de74515ddb9639d42d76b080e6850d1d610b83c11e1e05451b699cd
|
data/lib/pier_logging.rb
CHANGED
@@ -54,14 +54,16 @@ module PierLogging
|
|
54
54
|
end
|
55
55
|
|
56
56
|
class RequestLoggerConfiguration
|
57
|
-
attr_reader :enabled, :user_info_getter, :hide_response_body_for_paths,
|
57
|
+
attr_reader :enabled, :user_info_getter, :hide_response_body_for_paths,
|
58
|
+
:log_response, :hide_request_headers, :correlation_id_getter
|
58
59
|
|
59
60
|
def initialize
|
60
|
-
@user_info_getter = nil
|
61
|
+
@user_info_getter = ->(_ = nil) { nil }
|
61
62
|
@enabled = false
|
62
63
|
@hide_response_body_for_paths = nil
|
63
64
|
@log_response = true
|
64
65
|
@hide_request_headers = nil
|
66
|
+
@correlation_id_getter = ->(_ = nil, _ = nil) { nil }
|
65
67
|
end
|
66
68
|
|
67
69
|
def user_info_getter=(proc)
|
@@ -93,5 +95,10 @@ module PierLogging
|
|
93
95
|
raise ArgumentError, "Config 'enabled' must be a 'boolean'" unless !!enabled == enabled
|
94
96
|
@enabled = enabled
|
95
97
|
end
|
98
|
+
|
99
|
+
def correlation_id_getter=(proc)
|
100
|
+
raise ArgumentError, "Config 'correlation_id_getter' must be a 'Proc'" unless proc.is_a? Proc
|
101
|
+
@correlation_id_getter = proc
|
102
|
+
end
|
96
103
|
end
|
97
104
|
end
|
@@ -44,18 +44,20 @@ module PierLogging
|
|
44
44
|
env, status, type, body, starts_at, ends_at, _ = args
|
45
45
|
request = Rack::Request.new(env)
|
46
46
|
request_headers = get_request_headers_from_env(env)
|
47
|
-
logger.info
|
47
|
+
logger.info redact_object({
|
48
48
|
message: build_message_from_request(request),
|
49
49
|
type: 'http',
|
50
50
|
duration: ((ends_at - starts_at)*1000).to_i,
|
51
51
|
context: {
|
52
52
|
user: get_user_info_from_headers(request_headers),
|
53
|
-
|
53
|
+
request_id: env['action_dispatch.request_id'],
|
54
|
+
correlation_id: get_correlation_id(env, request_headers)
|
54
55
|
},
|
55
56
|
request: {
|
56
57
|
headers: request_headers,
|
57
58
|
href: request.url,
|
58
|
-
|
59
|
+
query_string: request.query_string,
|
60
|
+
body: parse_body(request.body)
|
59
61
|
},
|
60
62
|
response: {
|
61
63
|
status: status,
|
@@ -76,7 +78,7 @@ module PierLogging
|
|
76
78
|
headers = env.select { |k,v| k[0..4] == 'HTTP_'}.
|
77
79
|
transform_keys { |k| k[5..-1].split('_').join('-').upcase }
|
78
80
|
|
79
|
-
return
|
81
|
+
return redact_object(headers, hide_request_headers, nil) if hide_request_headers.present?
|
80
82
|
|
81
83
|
headers
|
82
84
|
end
|
@@ -101,6 +103,10 @@ module PierLogging
|
|
101
103
|
PierLogging.request_logger_configuration.user_info_getter.call(headers)
|
102
104
|
end
|
103
105
|
|
106
|
+
def get_correlation_id(env, headers)
|
107
|
+
PierLogging.request_logger_configuration.correlation_id_getter.call(env, headers) || headers['X-CORRELATION-ID']
|
108
|
+
end
|
109
|
+
|
104
110
|
def parse_body(body)
|
105
111
|
body_object = get_body_object(body)
|
106
112
|
Oj.load(body_object, allow_blank: true)
|
@@ -114,13 +120,35 @@ module PierLogging
|
|
114
120
|
body
|
115
121
|
end
|
116
122
|
|
123
|
+
def redact_object(obj, replace_keys = REDACT_REPLACE_KEYS, replace_by = REDACT_REPLACE_BY)
|
124
|
+
if obj === Array
|
125
|
+
redact_array(obj, replace_keys, replace_by)
|
126
|
+
elsif obj === Hash
|
127
|
+
redact_hash(obj, replace_keys, replace_by)
|
128
|
+
elsif obj.respond_to?(:to_hash)
|
129
|
+
redact_hash(obj.to_hash, replace_keys, replace_by)
|
130
|
+
else
|
131
|
+
obj
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
def redact_array(arr, replace_keys = REDACT_REPLACE_KEYS, replace_by = REDACT_REPLACE_BY)
|
136
|
+
raise StandardError, 'Could not redact_array for non-array objects' unless arr.is_a? Array
|
137
|
+
arr.map { |el| redact_object(el, replace_keys, replace_by) }
|
138
|
+
end
|
139
|
+
|
117
140
|
def redact_hash(hash, replace_keys = REDACT_REPLACE_KEYS, replace_by = REDACT_REPLACE_BY)
|
118
|
-
hash
|
141
|
+
raise StandardError, 'Could not redact_hash for non-hash objects' unless hash.is_a? Hash
|
142
|
+
hash.traverse do |k,v|
|
119
143
|
should_redact = replace_keys.any?{ |regex| k =~regex }
|
120
144
|
if (should_redact)
|
121
145
|
[k, replace_by]
|
122
146
|
else
|
123
|
-
|
147
|
+
case v
|
148
|
+
when Array then [k, redact_array(v, replace_keys, replace_by)]
|
149
|
+
else
|
150
|
+
[k, v]
|
151
|
+
end
|
124
152
|
end
|
125
153
|
end
|
126
154
|
end
|
data/lib/pier_logging/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pier_logging
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mauricio Banduk
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ougai
|