l2meter 0.9.1 → 0.10.0

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