pier_logging 0.1.13 → 0.2.2

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: 642d371babd98a5b8714f67e30d18db2ba10f89da453a916044cb078c64453d6
4
- data.tar.gz: 5c47cc13ebddab2937b0c6cdd9abb040e5d6cd7d15f6dab3c3b3ed8becb0da53
3
+ metadata.gz: 15b02b57cc80e8d5babe64aa73a7b29c2d1fac544acc2c069c7cb0ba4ee985fc
4
+ data.tar.gz: 13719e2b027929f1e385928a943a96200db798c008be2a4f7895c075ea34fefe
5
5
  SHA512:
6
- metadata.gz: 93f7ef6e9321afb13e39f07f37f4dfa4475f9be15a33aef48fc64571f468c253049256e0245a7000d394bbceeeb54a77e5297b815f3c9e1bbb8e2e477a311a9a
7
- data.tar.gz: 994b98c846e5c91aa496c18209479f909c6fd4f4a4172bfffa64caf8615926678b707d4b19915d623dea50fa441e0f3081a2e19ab20408b56c87890d2268ad15
6
+ metadata.gz: edcd064cef708218bc0c4fb6e2e2d0ae13737b41a666c14be34129ff5ef008dedf734e33b93fa6e5c82cff95e1ca2bc76f0dcdfc39ed944509dc2742d4c56fb6
7
+ data.tar.gz: 170036ef60fecdf8cc77b8aa51f5ac4e40e89f29e90fd8410d9c6a65f98a43ecf4f73f0ab79d8db865cd4a38a6fab5bb4da420f00b8d0129e314943c4f2e31f2
@@ -54,21 +54,51 @@ module PierLogging
54
54
  end
55
55
 
56
56
  class RequestLoggerConfiguration
57
- attr_reader :enabled, :user_info_getter
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
63
+ @hide_response_body_for_paths = nil
64
+ @log_response = true
65
+ @hide_request_headers = nil
66
+ @correlation_id_getter = ->(_ = nil, _ = nil) { nil }
62
67
  end
63
68
 
64
69
  def user_info_getter=(proc)
65
70
  raise ArgumentError, "Config 'user_info_getter' must be a 'Proc'" unless proc.is_a? Proc
66
71
  @user_info_getter = proc
67
72
  end
73
+
74
+ def log_response=(log_response)
75
+ raise ArgumentError, "Config 'log_response' must be a 'boolean'" unless !!log_response == log_response
76
+ @log_response = log_response
77
+ end
78
+
79
+ def hide_response_body_for_paths=(hide_response_body_for_paths)
80
+ unless (hide_response_body_for_paths.is_a? Array) && (hide_response_body_for_paths.all?{|item| item.is_a? Regexp})
81
+ raise ArgumentError, "Config 'hide_response_body_for_paths' must be an 'Array of Regexps'"
82
+ end
83
+
84
+ @hide_response_body_for_paths = hide_response_body_for_paths
85
+ end
86
+
87
+ def hide_request_headers=(hide_request_headers)
88
+ unless (hide_request_headers.is_a? Array) && (hide_request_headers.all?{|item| item.is_a? Regexp})
89
+ raise ArgumentError, "Config 'hide_request_headers' must be an 'Array of Regexps'"
90
+ end
91
+ @hide_request_headers = hide_request_headers
92
+ end
68
93
 
69
94
  def enabled=(enabled = false)
70
95
  raise ArgumentError, "Config 'enabled' must be a 'boolean'" unless !!enabled == enabled
71
96
  @enabled = enabled
72
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
73
103
  end
74
104
  end
@@ -50,7 +50,8 @@ module PierLogging
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: env['action_dispatch.request_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,
@@ -59,7 +60,7 @@ module PierLogging
59
60
  },
60
61
  response: {
61
62
  status: status,
62
- body: parse_body(body),
63
+ body: response_body(request.path, body),
63
64
  type: type['Content-Type'],
64
65
  }
65
66
  })
@@ -71,8 +72,23 @@ module PierLogging
71
72
 
72
73
  private
73
74
  def get_request_headers_from_env(env)
74
- env.select { |k,v| k[0..4] == 'HTTP_'}.
75
+ hide_request_headers = PierLogging.request_logger_configuration.hide_request_headers
76
+
77
+ headers = env.select { |k,v| k[0..4] == 'HTTP_'}.
75
78
  transform_keys { |k| k[5..-1].split('_').join('-').upcase }
79
+
80
+ return redact_hash(headers, hide_request_headers, nil) if hide_request_headers.present?
81
+
82
+ headers
83
+ end
84
+
85
+ def response_body(request_path, body)
86
+ return nil unless PierLogging.request_logger_configuration.log_response
87
+
88
+ hide_response_body_for_paths = PierLogging.request_logger_configuration.hide_response_body_for_paths
89
+ return nil if hide_response_body_for_paths && hide_response_body_for_paths.any?{ |path|request_path =~ path }
90
+
91
+ parse_body(body)
76
92
  end
77
93
 
78
94
  def build_message_from_request(request)
@@ -86,6 +102,10 @@ module PierLogging
86
102
  PierLogging.request_logger_configuration.user_info_getter.call(headers)
87
103
  end
88
104
 
105
+ def get_correlation_id(env, headers)
106
+ PierLogging.request_logger_configuration.correlation_id_getter(env, headers) || headers['X-CORRELATION-ID']
107
+ end
108
+
89
109
  def parse_body(body)
90
110
  body_object = get_body_object(body)
91
111
  Oj.load(body_object, allow_blank: true)
@@ -99,11 +119,11 @@ module PierLogging
99
119
  body
100
120
  end
101
121
 
102
- def redact_hash(hash)
122
+ def redact_hash(hash, replace_keys = REDACT_REPLACE_KEYS, replace_by = REDACT_REPLACE_BY)
103
123
  hash.traverse do |k,v|
104
- should_redact = REDACT_REPLACE_KEYS.any?{ |regex| k =~regex }
124
+ should_redact = replace_keys.any?{ |regex| k =~regex }
105
125
  if (should_redact)
106
- [k, REDACT_REPLACE_BY]
126
+ [k, replace_by]
107
127
  else
108
128
  [k, v]
109
129
  end
@@ -125,4 +145,4 @@ module PierLogging
125
145
  500
126
146
  end
127
147
  end
128
- end
148
+ end
@@ -1,3 +1,3 @@
1
1
  module PierLogging
2
- VERSION = "0.1.13"
2
+ VERSION = "0.2.2"
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.1.13
4
+ version: 0.2.2
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-09 00:00:00.000000000 Z
11
+ date: 2020-08-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ougai