l2meter 0.9.1 → 0.10.0

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
  SHA1:
3
- metadata.gz: f3673ba178109f4ff153a1e629f77ad8661eb927
4
- data.tar.gz: '09daa1747e20d54e43cd8002c17e57fb46810ae2'
3
+ metadata.gz: b8abd7703829d8b981631fd16b5fa6f30daea752
4
+ data.tar.gz: e539765cd1db9d19045a60ff6f437de738e8722d
5
5
  SHA512:
6
- metadata.gz: f6bb5ea3300ba4b1dc00d4782d51736b8660f050d207c94c27438d240a9550d06ad6a5f0855fbdc3ecc0372655c00a8329da8b5a8752a838cb6b0dd986cd70e9
7
- data.tar.gz: b3cb2ba31ce943f33de1d030aced621bd6c2dfe9ff02855e3136aedd5cc579ccd44193447605e6c886798905a024395431ba72bf5953644d9468dbfddf2dce91
6
+ metadata.gz: 7270713f3b643b674b9bfb6f5c9d3cceb1ba5f72893331314c8f2119f773ccbd708bade4fefc7434d7ca6c38161e718c50ff4b944f5539d28065ccd43c9cffdd
7
+ data.tar.gz: d4578d786d1518b2b7a8e226be63426006f85cd91a96975a309dfae900b451b361c4df52eeb85362165b8a8daad2ffa4d391bd2272e99bcabed1ddab18dbc537
data/README.md CHANGED
@@ -206,6 +206,28 @@ config.prefix = "my-app"
206
206
  Metrics.count :users, 100500 # => count#my-app.users=100500
207
207
  ```
208
208
 
209
+ ## Scrubbing
210
+
211
+ L2meter allows plugging in custom scrubbing logic that might be useful in
212
+ environments where logging compliance is important.
213
+
214
+ ```ruby
215
+ config.scrubber = ->(key, value) do
216
+ begin
217
+ uri = URI.parse(value)
218
+ uri.password = "scrubbed" if uri.password
219
+ uri.to_s
220
+ rescue URI::Error
221
+ value
222
+ end
223
+ end
224
+
225
+ Metric.log my_url: "https://user:password@example.com"
226
+ # => my-url="https://user:redacted@example.com"
227
+ ```
228
+
229
+ Note that returning nil value will make l2meter omit the field completely.
230
+
209
231
  ## Silence
210
232
 
211
233
  There's a way to temporary silence the log emitter. This might be userful for
@@ -1,7 +1,7 @@
1
1
  module L2meter
2
2
  class Configuration
3
3
  attr_writer :output
4
- attr_accessor :source, :prefix, :float_precision
4
+ attr_accessor :source, :prefix, :float_precision, :scrubber
5
5
  attr_reader :context, :key_formatter, :output
6
6
 
7
7
  DEFAULT_KEY_FORMATTER = ->(key) do
@@ -90,12 +90,8 @@ module L2meter
90
90
  end
91
91
 
92
92
  def fire!
93
- tokens = @buffer.map do |key, value|
94
- next if value.nil?
95
- key = format_key(key)
96
- value == true ? key : "#{key}=#{format_value(value)}"
97
- end.compact
98
-
93
+ tokens = @buffer.map { |key, value| build_token(key, value) }
94
+ tokens.compact!
99
95
  tokens.sort! if configuration.sort?
100
96
 
101
97
  output_queue.last.print tokens.join(SPACE) << NL if tokens.any?
@@ -124,6 +120,14 @@ module L2meter
124
120
  end
125
121
  end
126
122
 
123
+ def build_token(key, value)
124
+ value = value.call if Proc === value
125
+ return if value.nil?
126
+ value = scrub_value(key, value)
127
+ return if value.nil?
128
+ value == true ? key : "#{key}=#{format_value(value)}"
129
+ end
130
+
127
131
  def format_float(value, unit: nil)
128
132
  "%.#{configuration.float_precision}f#{unit}" % value
129
133
  end
@@ -143,7 +147,7 @@ module L2meter
143
147
 
144
148
  def format_value(value)
145
149
  case value
146
- when /[^\w,.:@-]/
150
+ when /[^\w,.:@\-\]\[]/
147
151
  value.strip.gsub(/\s+/, " ").inspect
148
152
  when String
149
153
  value.to_s
@@ -151,8 +155,6 @@ module L2meter
151
155
  format_float(value)
152
156
  when Time
153
157
  value.iso8601
154
- when Proc
155
- format_value(value.call)
156
158
  when Hash
157
159
  format_value(value.inspect)
158
160
  when Array
@@ -162,12 +164,11 @@ module L2meter
162
164
  end
163
165
  end
164
166
 
165
- def format_key(key)
166
- configuration.key_formatter.call(key)
167
- end
168
-
169
167
  def format_keys(hash)
170
- hash.each_with_object({}) { |(k, v), a| a[format_key(k)] = v }
168
+ hash.each_with_object({}) do |(key, value), acc|
169
+ key = configuration.key_formatter.call(key)
170
+ acc[key] = value
171
+ end
171
172
  end
172
173
 
173
174
  def write(params = nil)
@@ -222,5 +223,13 @@ module L2meter
222
223
  def elapsed_value(since)
223
224
  format_float(Time.now - since, unit: ?s)
224
225
  end
226
+
227
+ def scrub_value(key, value)
228
+ if scrubber = configuration.scrubber
229
+ scrubber.call(key, value)
230
+ else
231
+ value
232
+ end
233
+ end
225
234
  end
226
235
  end
@@ -1,3 +1,3 @@
1
1
  module L2meter
2
- VERSION = "0.9.1".freeze
2
+ VERSION = "0.10.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: l2meter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Pavel Pravosud
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-03-18 00:00:00.000000000 Z
11
+ date: 2017-04-07 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email:
@@ -45,7 +45,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
45
45
  version: '0'
46
46
  requirements: []
47
47
  rubyforge_project:
48
- rubygems_version: 2.6.10
48
+ rubygems_version: 2.6.11
49
49
  signing_key:
50
50
  specification_version: 4
51
51
  summary: L2met friendly log formatter