pier_logging 0.2.0 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c102d9c566bc2227233c2fb698f87f99a13061194f25d0d4728bc356ed2c1593
4
- data.tar.gz: 76d4d43102a6e10693dffb9f7b6671ecff73a2b22f47add8d2dbe9635b3c2044
3
+ metadata.gz: 5b2a1b9430577ae2c662d051aa5e305f33aeff05655333e0112a73386beab712
4
+ data.tar.gz: b1cb0e6cb96dde62fac3c7ae240e3f56aa14df4df416929eb889b68df4a09ae3
5
5
  SHA512:
6
- metadata.gz: f98a44d5ca1c3b360301550e14a20327301e12c40b8fc07286432068b9943bed4820472ba8f2d2c78aa87eefb0c3440c89153c4a1bbd1b78e5705c22aee8cfb9
7
- data.tar.gz: e072ab069990dd67224e1bfd7e3c32c446ef76849f222499adb94cd5c67ea50260ac25f7d36da8d5cda8cd43463482cb9e4327bb547a8a0d493665d100257d8a
6
+ metadata.gz: 6ea2ebdf2a038bd3c0b9b76f0409c0e3abf05eab7b00d5934c9bcf7b461e2bee3a35af07788a62d87cf892f333141ae5658348237effb7d171c1feddd511826c
7
+ data.tar.gz: d2aefc5a1d51a288e541d80cefc0caf3f9794726b8860131cdfc320eeba0ea0deac035097de74515ddb9639d42d76b080e6850d1d610b83c11e1e05451b699cd
@@ -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, :log_response, :hide_request_headers
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 redact_hash({
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
- correlation_id: request_headers['X-CORRELATION-ID'],
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
- body: parse_body(request.POST)
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 redact_hash(headers, hide_request_headers, nil) if hide_request_headers.present?
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.traverse do |k,v|
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
- [k, v]
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
@@ -1,3 +1,3 @@
1
1
  module PierLogging
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.5"
3
3
  end
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.0
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-07-14 00:00:00.000000000 Z
11
+ date: 2020-09-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ougai