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 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