semantic_logger 3.0.1 → 3.1.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.
Files changed (39) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/semantic_logger.rb +29 -13
  4. data/lib/semantic_logger/ansi_colors.rb +27 -0
  5. data/lib/semantic_logger/appender/base.rb +54 -128
  6. data/lib/semantic_logger/appender/bugsnag.rb +29 -19
  7. data/lib/semantic_logger/appender/elasticsearch.rb +9 -9
  8. data/lib/semantic_logger/appender/file.rb +40 -18
  9. data/lib/semantic_logger/appender/graylog.rb +30 -26
  10. data/lib/semantic_logger/appender/http.rb +14 -19
  11. data/lib/semantic_logger/appender/mongodb.rb +20 -20
  12. data/lib/semantic_logger/appender/new_relic.rb +15 -15
  13. data/lib/semantic_logger/appender/splunk.rb +1 -1
  14. data/lib/semantic_logger/appender/splunk_http.rb +28 -25
  15. data/lib/semantic_logger/appender/syslog.rb +41 -42
  16. data/lib/semantic_logger/appender/wrapper.rb +19 -17
  17. data/lib/semantic_logger/base.rb +57 -32
  18. data/lib/semantic_logger/concerns/compatibility.rb +51 -0
  19. data/lib/semantic_logger/debug_as_trace_logger.rb +6 -2
  20. data/lib/semantic_logger/formatters/color.rb +66 -0
  21. data/lib/semantic_logger/formatters/default.rb +39 -0
  22. data/lib/semantic_logger/formatters/json.rb +16 -0
  23. data/lib/semantic_logger/jruby/garbage_collection_logger.rb +1 -1
  24. data/lib/semantic_logger/log.rb +13 -8
  25. data/lib/semantic_logger/loggable.rb +2 -2
  26. data/lib/semantic_logger/logger.rb +18 -13
  27. data/lib/semantic_logger/metrics/new_relic.rb +18 -0
  28. data/lib/semantic_logger/metrics/statsd.rb +48 -0
  29. data/lib/semantic_logger/semantic_logger.rb +122 -55
  30. data/lib/semantic_logger/version.rb +1 -1
  31. data/test/appender/bugsnag_test.rb +12 -3
  32. data/test/appender/mongodb_test.rb +6 -5
  33. data/test/appender/new_relic_test.rb +1 -1
  34. data/test/appender/splunk_http_test.rb +1 -0
  35. data/test/concerns/compatibility_test.rb +106 -0
  36. data/test/debug_as_trace_logger_test.rb +1 -1
  37. data/test/loggable_test.rb +1 -1
  38. data/test/logger_test.rb +183 -24
  39. metadata +12 -3
@@ -1,3 +1,3 @@
1
1
  module SemanticLogger #:nodoc
2
- VERSION = '3.0.1'
2
+ VERSION = '3.1.0'
3
3
  end
@@ -9,9 +9,18 @@ module Appender
9
9
  @message = 'AppenderBugsnagTest log message'
10
10
  end
11
11
 
12
- (SemanticLogger::LEVELS - [:warn, :error]).each do |level|
12
+ SemanticLogger::LEVELS.each do |level|
13
13
  it "sends #{level} message" do
14
- exception = hash = nil
14
+ bugsnag_level =
15
+ case level
16
+ when :warn
17
+ 'warning'
18
+ when :fatal
19
+ 'error'
20
+ else
21
+ level.to_s
22
+ end
23
+ exception = hash = nil
15
24
  Bugsnag.stub(:notify, -> exc, h { exception = exc; hash = h }) do
16
25
  @appender.send(level, @message)
17
26
  end
@@ -21,7 +30,7 @@ module Appender
21
30
  else
22
31
  assert_equal 'RuntimeError', exception.class.to_s
23
32
  assert_equal @message, exception.message
24
- assert_equal level.to_s, hash[:severity]
33
+ assert_equal bugsnag_level.to_s, hash[:severity]
25
34
  end
26
35
  end
27
36
 
@@ -23,7 +23,7 @@ module Appender
23
23
  end
24
24
 
25
25
  describe 'format logs into documents' do
26
- it 'handle nil name, message and hash' do
26
+ it 'handle no arguments' do
27
27
  @appender.debug
28
28
  document = @appender.collection.find_one
29
29
  assert_equal :debug, document['level']
@@ -36,15 +36,16 @@ module Appender
36
36
  assert_equal 'test_application', document['application']
37
37
  end
38
38
 
39
- it "handle nil message and payload" do
39
+ it 'handle hash message' do
40
40
  @appender.debug(@hash)
41
41
 
42
42
  document = @appender.collection.find_one
43
43
  assert_equal :debug, document['level']
44
- assert_equal @hash.inspect, document['message']
44
+ assert_equal nil, document['message']
45
45
  assert_equal 'thread', document['thread']
46
46
  assert document['time'].is_a?(Time)
47
- assert_nil document['payload']
47
+ assert_equal 12345, document['tracking_number']
48
+ assert_equal 'HSSKLEU@JDK767', document['session_id']
48
49
  assert_equal $$, document['pid']
49
50
  assert_equal 'test', document['host']
50
51
  assert_equal 'test_application', document['application']
@@ -80,7 +81,7 @@ module Appender
80
81
  end
81
82
  end
82
83
 
83
- describe "for each log level" do
84
+ describe 'for each log level' do
84
85
  # Ensure that any log level can be logged
85
86
  SemanticLogger::LEVELS.each do |level|
86
87
  it 'log #{level} information' do
@@ -46,7 +46,7 @@ module Appender
46
46
  NewRelic::Agent.stub(:notice_error, -> exc, h { exception = exc; hash = h }) do
47
47
  @appender.tagged('test') do
48
48
  @appender.with_payload({key1: 1, key2: 'a'}) do
49
- @appender.benchmark(:error, @message) do
49
+ @appender.measure(:error, @message) do
50
50
  sleep 0.001
51
51
  end
52
52
  end
@@ -55,6 +55,7 @@ module Appender
55
55
  end
56
56
  body = decompress_data(request.body)
57
57
  message = JSON.parse(body)
58
+ assert message['event'], message.ai
58
59
  assert_equal @message, message['event']['message']
59
60
  assert_equal level.to_s, message['event']['level']
60
61
  refute message['event']['stack_trace']
@@ -0,0 +1,106 @@
1
+ require_relative '../test_helper'
2
+
3
+ # Unit Test for SemanticLogger::Logger
4
+ class CompatibilityTest < Minitest::Test
5
+ describe SemanticLogger::Logger do
6
+ before do
7
+ # Use a mock logger that just keeps the last logged entry in an instance
8
+ # variable
9
+ SemanticLogger.default_level = :trace
10
+ SemanticLogger.backtrace_level = nil
11
+ @mock_logger = MockLogger.new
12
+ @appender = SemanticLogger.add_appender(logger: @mock_logger)
13
+
14
+ # Use this test's class name as the application name in the log output
15
+ @logger = SemanticLogger[CompatibilityTest]
16
+ @thread_name = Thread.current.name
17
+ end
18
+
19
+ after do
20
+ SemanticLogger.remove_appender(@appender)
21
+ end
22
+
23
+ it '#add' do
24
+ @logger.add(Logger::INFO, 'hello world', 'progname') { 'Data' }
25
+ SemanticLogger.flush
26
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ I \[\d+:#{@thread_name}\] CompatibilityTest -- hello world -- Data -- \"progname\"/, @mock_logger.message
27
+ end
28
+
29
+ it '#log' do
30
+ @logger.log(Logger::FATAL, 'hello world', 'progname') { 'Data' }
31
+ SemanticLogger.flush
32
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ F \[\d+:#{@thread_name}\] CompatibilityTest -- hello world -- Data -- \"progname\"/, @mock_logger.message
33
+ end
34
+
35
+ it '#unknown' do
36
+ @logger.unknown('hello world') { 'Data' }
37
+ SemanticLogger.flush
38
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ E \[\d+:#{@thread_name}\] CompatibilityTest -- hello world -- Data/, @mock_logger.message
39
+ end
40
+
41
+ it '#unknown? as error?' do
42
+ SemanticLogger.default_level = :error
43
+ assert @logger.unknown?
44
+ end
45
+
46
+ it '#unknown? as error? when false' do
47
+ SemanticLogger.default_level = :fatal
48
+ refute @logger.unknown?
49
+ end
50
+
51
+ it '#<< as info' do
52
+ @logger << 'hello world'
53
+ SemanticLogger.flush
54
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ I \[\d+:#{@thread_name}\] CompatibilityTest -- hello world/, @mock_logger.message
55
+ end
56
+
57
+ it '#progname= as #name=' do
58
+ assert_equal 'CompatibilityTest', @logger.name
59
+ @logger.progname = 'NewTest'
60
+ assert_equal 'NewTest', @logger.name
61
+ end
62
+
63
+ it '#progname as #name' do
64
+ assert_equal 'CompatibilityTest', @logger.name
65
+ assert_equal 'CompatibilityTest', @logger.progname
66
+ end
67
+
68
+ it '#sev_threshold= as #level=' do
69
+ assert_equal :trace, @logger.level
70
+ @logger.sev_threshold = Logger::DEBUG
71
+ assert_equal :debug, @logger.level
72
+ end
73
+
74
+ it '#sev_threshold as #level' do
75
+ assert_equal :trace, @logger.level
76
+ assert_equal :trace, @logger.sev_threshold
77
+ end
78
+
79
+ it '#formatter NOOP' do
80
+ assert_equal nil, @logger.formatter
81
+ @logger.formatter = 'blah'
82
+ assert_equal 'blah', @logger.formatter
83
+ end
84
+
85
+ it '#datetime_format NOOP' do
86
+ assert_equal nil, @logger.datetime_format
87
+ @logger.datetime_format = 'blah'
88
+ assert_equal 'blah', @logger.datetime_format
89
+ end
90
+
91
+ it '#close NOOP' do
92
+ @logger.close
93
+ @logger.info('hello world') { 'Data' }
94
+ SemanticLogger.flush
95
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ I \[\d+:#{@thread_name}\] CompatibilityTest -- hello world -- Data/, @mock_logger.message
96
+ end
97
+
98
+ it '#reopen NOOP' do
99
+ @logger.reopen
100
+ @logger.info('hello world') { 'Data' }
101
+ SemanticLogger.flush
102
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ I \[\d+:#{@thread_name}\] CompatibilityTest -- hello world -- Data/, @mock_logger.message
103
+ end
104
+
105
+ end
106
+ end
@@ -11,7 +11,7 @@ class DebugAsTraceLoggerTest < Minitest::Test
11
11
  # variable
12
12
  SemanticLogger.default_level = :trace
13
13
  @mock_logger = MockLogger.new
14
- appender = SemanticLogger.add_appender(@mock_logger)
14
+ appender = SemanticLogger.add_appender(logger: @mock_logger)
15
15
  appender.filter = filter
16
16
 
17
17
  # Use this test's class name as the application name in the log output
@@ -79,7 +79,7 @@ class AppenderFileTest < Minitest::Test
79
79
  @appender = SemanticLogger::Appender::File.new(@io)
80
80
  SemanticLogger.default_level = :trace
81
81
  @mock_logger = MockLogger.new
82
- @appender = SemanticLogger.add_appender(@mock_logger)
82
+ @appender = SemanticLogger.add_appender(logger: @mock_logger)
83
83
  @hash = {session_id: 'HSSKLEU@JDK767', tracking_number: 12345}
84
84
  @hash_str = @hash.inspect.sub("{", "\\{").sub("}", "\\}")
85
85
  @thread_name = Thread.current.name
@@ -3,6 +3,105 @@ require_relative 'test_helper'
3
3
  # Unit Test for SemanticLogger::Logger
4
4
  class LoggerTest < Minitest::Test
5
5
  describe SemanticLogger::Logger do
6
+ describe '.add_appender' do
7
+ after do
8
+ SemanticLogger.remove_appender(@appender) if @appender
9
+ File.delete('sample.log') if File.exists?('sample.log')
10
+ end
11
+
12
+ it 'adds file appender' do
13
+ @appender = SemanticLogger.add_appender(file_name: 'sample.log')
14
+ assert @appender.is_a?(SemanticLogger::Appender::File)
15
+ assert SemanticLogger.appenders.include?(@appender)
16
+ assert @appender.formatter.is_a?(SemanticLogger::Formatters::Default)
17
+ end
18
+
19
+ it 'adds file appender with json format' do
20
+ @appender = SemanticLogger.add_appender(file_name: 'sample.log', formatter: :json)
21
+ assert @appender.is_a?(SemanticLogger::Appender::File)
22
+ assert SemanticLogger.appenders.include?(@appender)
23
+ assert @appender.formatter.is_a?(SemanticLogger::Formatters::Json)
24
+ end
25
+
26
+ it 'adds stream appender' do
27
+ @appender = SemanticLogger.add_appender(io: STDOUT)
28
+ assert @appender.is_a?(SemanticLogger::Appender::File)
29
+ assert SemanticLogger.appenders.include?(@appender)
30
+ end
31
+
32
+ it 'adds symbol appender' do
33
+ @appender = SemanticLogger.add_appender(appender: :http, url: 'http://localhost:8088/path')
34
+ assert @appender.is_a?(SemanticLogger::Appender::Http), @appender.ai
35
+ assert SemanticLogger.appenders.include?(@appender)
36
+ end
37
+
38
+ it 'adds logger wrapper appender' do
39
+ @appender = SemanticLogger.add_appender(logger: ::Logger.new(STDOUT))
40
+ assert @appender.is_a?(SemanticLogger::Appender::Wrapper)
41
+ assert @appender.logger.is_a?(::Logger)
42
+ assert SemanticLogger.appenders.include?(@appender)
43
+ assert @appender.formatter.is_a?(SemanticLogger::Formatters::Default)
44
+ end
45
+
46
+ it 'adds logger wrapper appender with color formatter' do
47
+ @appender = SemanticLogger.add_appender(logger: ::Logger.new(STDOUT), formatter: :color)
48
+ assert @appender.is_a?(SemanticLogger::Appender::Wrapper)
49
+ assert @appender.logger.is_a?(::Logger)
50
+ assert SemanticLogger.appenders.include?(@appender)
51
+ assert @appender.formatter.is_a?(SemanticLogger::Formatters::Color)
52
+ end
53
+
54
+ it 'adds appender' do
55
+ @appender = SemanticLogger.add_appender(appender: SemanticLogger::Appender::Http.new(url: 'http://localhost:8088/path'))
56
+ assert @appender.is_a?(SemanticLogger::Appender::Http), @appender.ai
57
+ assert SemanticLogger.appenders.include?(@appender)
58
+ end
59
+
60
+ it 'fails to add invalid logger appender' do
61
+ assert_raises do
62
+ SemanticLogger.add_appender(logger: 'blah')
63
+ end
64
+ end
65
+ end
66
+
67
+ describe '.add_appender DEPRECATED' do
68
+ after do
69
+ SemanticLogger.remove_appender(@appender) if @appender
70
+ File.delete('sample.log') if File.exists?('sample.log')
71
+ end
72
+
73
+ it 'adds file appender' do
74
+ @appender = SemanticLogger.add_appender('sample.log')
75
+ assert @appender.is_a?(SemanticLogger::Appender::File)
76
+ assert SemanticLogger.appenders.include?(@appender)
77
+ end
78
+
79
+ it 'adds stream appender' do
80
+ @appender = SemanticLogger.add_appender(STDOUT)
81
+ assert @appender.is_a?(SemanticLogger::Appender::File)
82
+ assert SemanticLogger.appenders.include?(@appender)
83
+ end
84
+
85
+ it 'adds appender' do
86
+ @appender = SemanticLogger.add_appender(SemanticLogger::Appender::Http.new(url: 'http://localhost:8088/path'))
87
+ assert @appender.is_a?(SemanticLogger::Appender::Http), @appender.ai
88
+ assert SemanticLogger.appenders.include?(@appender)
89
+ end
90
+
91
+ it 'adds logger wrapper appender' do
92
+ @appender = SemanticLogger.add_appender(::Logger.new(STDOUT))
93
+ assert @appender.is_a?(SemanticLogger::Appender::Wrapper)
94
+ assert @appender.logger.is_a?(::Logger)
95
+ assert SemanticLogger.appenders.include?(@appender)
96
+ end
97
+
98
+ it 'fails to add invalid logger appender' do
99
+ assert_raises do
100
+ SemanticLogger.add_appender(logger: 'blah')
101
+ end
102
+ end
103
+ end
104
+
6
105
  # Test each filter
7
106
  [nil, /\ALogger/, Proc.new { |l| (/\AExclude/ =~ l.message).nil? }].each do |filter|
8
107
  describe "filter: #{filter.class.name}" do
@@ -12,13 +111,13 @@ class LoggerTest < Minitest::Test
12
111
  SemanticLogger.default_level = :trace
13
112
  SemanticLogger.backtrace_level = nil
14
113
  @mock_logger = MockLogger.new
15
- @appender = SemanticLogger.add_appender(@mock_logger)
114
+ @appender = SemanticLogger.add_appender(logger: @mock_logger)
16
115
  @appender.filter = filter
17
116
 
18
117
  # Add mock metric subscriber
19
118
  $last_metric = nil
20
- SemanticLogger.on_metric do |log_struct|
21
- $last_metric = log_struct.dup
119
+ SemanticLogger.on_metric do |log|
120
+ $last_metric = log.dup
22
121
  end
23
122
 
24
123
  # Use this test's class name as the application name in the log output
@@ -96,6 +195,66 @@ class LoggerTest < Minitest::Test
96
195
  assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] LoggerTest -- Hello world/, @mock_logger.message
97
196
  end
98
197
 
198
+ describe 'hash only argument' do
199
+ it 'logs message' do
200
+ @logger.send(level, message: 'Hello world')
201
+ SemanticLogger.flush
202
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] LoggerTest -- Hello world/, @mock_logger.message
203
+ end
204
+
205
+ it 'logs payload and message' do
206
+ @logger.send(level, message: 'Hello world', tracking_number: '123456', even: 2, more: 'data')
207
+ hash = {tracking_number: '123456', even: 2, more: 'data'}
208
+ SemanticLogger.flush
209
+ hash_str = hash.inspect.sub('{', '\{').sub('}', '\}')
210
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] LoggerTest -- Hello world -- #{hash_str}/, @mock_logger.message
211
+ end
212
+
213
+ it 'logs payload and message from block' do
214
+ @logger.send(level) { {message: 'Hello world', tracking_number: '123456', even: 2, more: 'data'} }
215
+ hash = {tracking_number: '123456', even: 2, more: 'data'}
216
+ SemanticLogger.flush
217
+ hash_str = hash.inspect.sub('{', '\{').sub('}', '\}')
218
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] LoggerTest -- Hello world -- #{hash_str}/, @mock_logger.message
219
+ end
220
+
221
+ it 'logs payload only' do
222
+ hash = {tracking_number: '123456', even: 2, more: 'data'}
223
+ @logger.send(level, hash)
224
+ SemanticLogger.flush
225
+ hash_str = hash.inspect.sub('{', '\{').sub('}', '\}')
226
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] LoggerTest -- #{hash_str}/, @mock_logger.message
227
+ end
228
+
229
+ it 'logs duration' do
230
+ @logger.send(level, duration: 123.45, message: 'Hello world', tracking_number: '123456', even: 2, more: 'data')
231
+ hash = {tracking_number: '123456', even: 2, more: 'data'}
232
+ SemanticLogger.flush
233
+ hash_str = hash.inspect.sub('{', '\{').sub('}', '\}')
234
+ duration_match = defined?(JRuby) ? '\(123ms\)' : '\(123\.5ms\)'
235
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] #{duration_match} LoggerTest -- Hello world -- #{hash_str}/, @mock_logger.message
236
+ end
237
+
238
+ it 'does not log when below min_duration' do
239
+ @logger.send(level, min_duration: 200, duration: 123.45, message: 'Hello world', tracking_number: '123456', even: 2, more: 'data')
240
+ hash = {tracking_number: '123456', even: 2, more: 'data'}
241
+ SemanticLogger.flush
242
+ assert_nil @mock_logger.message
243
+ end
244
+
245
+ it 'logs metric' do
246
+ metric_name = '/my/custom/metric'
247
+ @logger.send(level, metric: metric_name, duration: 123.45, message: 'Hello world', tracking_number: '123456', even: 2, more: 'data')
248
+ hash = {tracking_number: '123456', even: 2, more: 'data'}
249
+ SemanticLogger.flush
250
+ hash_str = hash.inspect.sub('{', '\{').sub('}', '\}')
251
+ duration_match = defined?(JRuby) ? '\(123ms\)' : '\(123\.5ms\)'
252
+ assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] #{duration_match} LoggerTest -- Hello world -- #{hash_str}/, @mock_logger.message
253
+ assert metric_name, $last_metric.metric
254
+ end
255
+
256
+ end
257
+
99
258
  end
100
259
  end
101
260
 
@@ -160,39 +319,39 @@ class LoggerTest < Minitest::Test
160
319
  end
161
320
  end
162
321
 
163
- describe 'benchmark' do
164
- # Ensure that any log level can be benchmarked and logged
322
+ describe 'measure' do
323
+ # Ensure that any log level can be measured and logged
165
324
  SemanticLogger::LEVELS.each do |level|
166
325
  level_char = level.to_s.upcase[0]
167
326
 
168
327
  describe 'direct method' do
169
328
  it "log #{level} info" do
170
- assert_equal 'result', @logger.send("benchmark_#{level}".to_sym, 'hello world') { 'result' } # Measure duration of the supplied block
329
+ assert_equal 'result', @logger.send("measure_#{level}".to_sym, 'hello world') { 'result' } # Measure duration of the supplied block
171
330
  SemanticLogger.flush
172
331
  assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] \((\d+\.\d+)|(\d+)ms\) LoggerTest -- hello world/, @mock_logger.message
173
332
  end
174
333
 
175
334
  it "log #{level} info with payload" do
176
- assert_equal 'result', @logger.send("benchmark_#{level}".to_sym, 'hello world', payload: @hash) { 'result' } # Measure duration of the supplied block
335
+ assert_equal 'result', @logger.send("measure_#{level}".to_sym, 'hello world', payload: @hash) { 'result' } # Measure duration of the supplied block
177
336
  SemanticLogger.flush
178
337
  assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] \((\d+\.\d+)|(\d+)ms\) LoggerTest -- hello world -- #{@hash_str}/, @mock_logger.message
179
338
  end
180
339
 
181
340
  it "not log #{level} info when block is faster than :min_duration" do
182
- assert_equal 'result', @logger.send("benchmark_#{level}".to_sym, 'hello world', min_duration: 500) { 'result' } # Measure duration of the supplied block
341
+ assert_equal 'result', @logger.send("measure_#{level}".to_sym, 'hello world', min_duration: 500) { 'result' } # Measure duration of the supplied block
183
342
  SemanticLogger.flush
184
343
  assert_nil @mock_logger.message
185
344
  end
186
345
 
187
346
  it "log #{level} info when block duration exceeds :min_duration" do
188
- assert_equal 'result', @logger.send("benchmark_#{level}".to_sym, 'hello world', min_duration: 200, payload: @hash) { sleep 0.5; 'result' } # Measure duration of the supplied block
347
+ assert_equal 'result', @logger.send("measure_#{level}".to_sym, 'hello world', min_duration: 200, payload: @hash) { sleep 0.5; 'result' } # Measure duration of the supplied block
189
348
  SemanticLogger.flush
190
349
  assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] \((\d+\.\d+)|(\d+)ms\) LoggerTest -- hello world -- #{@hash_str}/, @mock_logger.message
191
350
  end
192
351
 
193
352
  it "log #{level} info with an exception" do
194
353
  assert_raises RuntimeError do
195
- @logger.send("benchmark_#{level}", 'hello world', payload: @hash) { raise RuntimeError.new("Test") } # Measure duration of the supplied block
354
+ @logger.send("measure_#{level}", 'hello world', payload: @hash) { raise RuntimeError.new("Test") } # Measure duration of the supplied block
196
355
  end
197
356
  SemanticLogger.flush
198
357
  assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}#{@file_name_reg_exp}\] \((\d+\.\d+)|(\d+)ms\) LoggerTest -- hello world -- Exception: RuntimeError: Test -- #{@hash_str}/, @mock_logger.message
@@ -200,7 +359,7 @@ class LoggerTest < Minitest::Test
200
359
 
201
360
  it "change log #{level} info with an exception" do
202
361
  assert_raises RuntimeError do
203
- @logger.send("benchmark_#{level}", 'hello world', payload: @hash, on_exception_level: :fatal) { raise RuntimeError.new("Test") } # Measure duration of the supplied block
362
+ @logger.send("measure_#{level}", 'hello world', payload: @hash, on_exception_level: :fatal) { raise RuntimeError.new("Test") } # Measure duration of the supplied block
204
363
  end
205
364
  SemanticLogger.flush
206
365
  assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ F \[\d+:#{@thread_name}#{@file_name_reg_exp}\] \((\d+\.\d+)|(\d+)ms\) LoggerTest -- hello world -- Exception: RuntimeError: Test -- #{@hash_str}/, @mock_logger.message
@@ -208,7 +367,7 @@ class LoggerTest < Minitest::Test
208
367
 
209
368
  it "log #{level} info with metric" do
210
369
  metric_name = '/my/custom/metric'
211
- assert_equal 'result', @logger.send("benchmark_#{level}".to_sym, 'hello world', metric: metric_name) { 'result' } # Measure duration of the supplied block
370
+ assert_equal 'result', @logger.send("measure_#{level}".to_sym, 'hello world', metric: metric_name) { 'result' } # Measure duration of the supplied block
212
371
  SemanticLogger.flush
213
372
  assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] \((\d+\.\d+)|(\d+)ms\) LoggerTest -- hello world/, @mock_logger.message
214
373
  assert metric_name, $last_metric.metric
@@ -216,7 +375,7 @@ class LoggerTest < Minitest::Test
216
375
 
217
376
  it "log #{level} info with backtrace" do
218
377
  SemanticLogger.stub(:backtrace_level_index, 0) do
219
- assert_equal 'result', @logger.send("benchmark_#{level}".to_sym, 'hello world') { 'result' }
378
+ assert_equal 'result', @logger.send("measure_#{level}".to_sym, 'hello world') { 'result' }
220
379
  SemanticLogger.flush
221
380
  assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}#{@file_name_reg_exp}\] \((\d+\.\d+)|(\d+)ms\) LoggerTest -- hello world/, @mock_logger.message
222
381
  end
@@ -225,32 +384,32 @@ class LoggerTest < Minitest::Test
225
384
 
226
385
  describe 'generic method' do
227
386
  it "log #{level} info" do
228
- assert_equal 'result', @logger.benchmark(level, 'hello world') { 'result' } # Measure duration of the supplied block
387
+ assert_equal 'result', @logger.measure(level, 'hello world') { 'result' } # Measure duration of the supplied block
229
388
  SemanticLogger.flush
230
389
  assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] \((\d+\.\d+)|(\d+)ms\) LoggerTest -- hello world/, @mock_logger.message
231
390
  end
232
391
 
233
392
  it "log #{level} info with payload" do
234
- assert_equal 'result', @logger.benchmark(level, 'hello world', payload: @hash) { 'result' } # Measure duration of the supplied block
393
+ assert_equal 'result', @logger.measure(level, 'hello world', payload: @hash) { 'result' } # Measure duration of the supplied block
235
394
  SemanticLogger.flush
236
395
  assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] \((\d+\.\d+)|(\d+)ms\) LoggerTest -- hello world -- #{@hash_str}/, @mock_logger.message
237
396
  end
238
397
 
239
398
  it "not log #{level} info when block is faster than :min_duration" do
240
- assert_equal 'result', @logger.benchmark(level, 'hello world', min_duration: 500) { 'result' } # Measure duration of the supplied block
399
+ assert_equal 'result', @logger.measure(level, 'hello world', min_duration: 500) { 'result' } # Measure duration of the supplied block
241
400
  SemanticLogger.flush
242
401
  assert_nil @mock_logger.message
243
402
  end
244
403
 
245
404
  it "log #{level} info when block duration exceeds :min_duration" do
246
- assert_equal 'result', @logger.benchmark(level, 'hello world', min_duration: 200, payload: @hash) { sleep 0.5; 'result' } # Measure duration of the supplied block
405
+ assert_equal 'result', @logger.measure(level, 'hello world', min_duration: 200, payload: @hash) { sleep 0.5; 'result' } # Measure duration of the supplied block
247
406
  SemanticLogger.flush
248
407
  assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] \((\d+\.\d+)|(\d+)ms\) LoggerTest -- hello world -- #{@hash_str}/, @mock_logger.message
249
408
  end
250
409
 
251
410
  it "log #{level} info with an exception" do
252
411
  assert_raises RuntimeError do
253
- @logger.benchmark(level, 'hello world', payload: @hash) { raise RuntimeError.new('Test') } # Measure duration of the supplied block
412
+ @logger.measure(level, 'hello world', payload: @hash) { raise RuntimeError.new('Test') } # Measure duration of the supplied block
254
413
  end
255
414
  SemanticLogger.flush
256
415
  assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}#{@file_name_reg_exp}\] \((\d+\.\d+)|(\d+)ms\) LoggerTest -- hello world -- Exception: RuntimeError: Test -- #{@hash_str}/, @mock_logger.message
@@ -258,7 +417,7 @@ class LoggerTest < Minitest::Test
258
417
 
259
418
  it "log #{level} info with metric" do
260
419
  metric_name = '/my/custom/metric'
261
- assert_equal 'result', @logger.benchmark(level, 'hello world', metric: metric_name) { 'result' } # Measure duration of the supplied block
420
+ assert_equal 'result', @logger.measure(level, 'hello world', metric: metric_name) { 'result' } # Measure duration of the supplied block
262
421
  SemanticLogger.flush
263
422
  assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}\] \((\d+\.\d+)|(\d+)ms\) LoggerTest -- hello world/, @mock_logger.message
264
423
  assert metric_name, $last_metric.metric
@@ -266,7 +425,7 @@ class LoggerTest < Minitest::Test
266
425
 
267
426
  it "log #{level} info with backtrace" do
268
427
  SemanticLogger.stub(:backtrace_level_index, 0) do
269
- assert_equal 'result', @logger.benchmark(level, 'hello world') { 'result' }
428
+ assert_equal 'result', @logger.measure(level, 'hello world') { 'result' }
270
429
  SemanticLogger.flush
271
430
  assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}#{@file_name_reg_exp}\] \((\d+\.\d+)|(\d+)ms\) LoggerTest -- hello world/, @mock_logger.message
272
431
  end
@@ -282,7 +441,7 @@ class LoggerTest < Minitest::Test
282
441
 
283
442
  it 'not log at a level below the silence level' do
284
443
  SemanticLogger.default_level = :info
285
- @logger.benchmark_info('hello world', silence: :error) do
444
+ @logger.measure_info('hello world', silence: :error) do
286
445
  @logger.warn "don't log me"
287
446
  end
288
447
  SemanticLogger.flush
@@ -292,7 +451,7 @@ class LoggerTest < Minitest::Test
292
451
  it 'log at a silence level below the default level' do
293
452
  SemanticLogger.default_level = :info
294
453
  first_message = nil
295
- @logger.benchmark_info('hello world', silence: :trace) do
454
+ @logger.measure_info('hello world', silence: :trace) do
296
455
  @logger.debug('hello world', @hash) { 'Calculations' }
297
456
  SemanticLogger.flush
298
457
  first_message = @mock_logger.message
@@ -415,10 +574,10 @@ class LoggerTest < Minitest::Test
415
574
  end
416
575
  end
417
576
 
418
- # Make sure that benchmark still logs when a block uses return to return from
577
+ # Make sure that measure still logs when a block uses return to return from
419
578
  # a function
420
579
  def function_with_return(logger)
421
- logger.benchmark_info('hello world', payload: @hash) do
580
+ logger.measure_info('hello world', payload: @hash) do
422
581
  return 'Good'
423
582
  end
424
583
  'Bad'