semantic_logger 4.2.0 → 4.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -3
- data/Rakefile +1 -1
- data/lib/semantic_logger/ansi_colors.rb +11 -12
- data/lib/semantic_logger/appender.rb +4 -5
- data/lib/semantic_logger/appender/async.rb +24 -16
- data/lib/semantic_logger/appender/async_batch.rb +1 -4
- data/lib/semantic_logger/appender/bugsnag.rb +67 -63
- data/lib/semantic_logger/appender/elasticsearch.rb +154 -157
- data/lib/semantic_logger/appender/elasticsearch_http.rb +59 -55
- data/lib/semantic_logger/appender/file.rb +1 -3
- data/lib/semantic_logger/appender/graylog.rb +114 -110
- data/lib/semantic_logger/appender/honeybadger.rb +54 -51
- data/lib/semantic_logger/appender/http.rb +194 -190
- data/lib/semantic_logger/appender/kafka.rb +152 -149
- data/lib/semantic_logger/appender/mongodb.rb +3 -3
- data/lib/semantic_logger/appender/new_relic.rb +52 -49
- data/lib/semantic_logger/appender/sentry.rb +59 -54
- data/lib/semantic_logger/appender/splunk.rb +108 -103
- data/lib/semantic_logger/appender/splunk_http.rb +82 -79
- data/lib/semantic_logger/appender/syslog.rb +4 -5
- data/lib/semantic_logger/appender/tcp.rb +8 -29
- data/lib/semantic_logger/appender/udp.rb +2 -3
- data/lib/semantic_logger/appender/wrapper.rb +2 -2
- data/lib/semantic_logger/base.rb +18 -16
- data/lib/semantic_logger/concerns/compatibility.rb +0 -1
- data/lib/semantic_logger/core_ext/thread.rb +0 -1
- data/lib/semantic_logger/formatters.rb +3 -5
- data/lib/semantic_logger/formatters/base.rb +2 -3
- data/lib/semantic_logger/formatters/color.rb +29 -12
- data/lib/semantic_logger/formatters/default.rb +10 -10
- data/lib/semantic_logger/formatters/json.rb +0 -2
- data/lib/semantic_logger/formatters/one_line.rb +2 -2
- data/lib/semantic_logger/formatters/raw.rb +7 -10
- data/lib/semantic_logger/formatters/signalfx.rb +3 -5
- data/lib/semantic_logger/formatters/syslog.rb +2 -3
- data/lib/semantic_logger/formatters/syslog_cee.rb +2 -3
- data/lib/semantic_logger/jruby/garbage_collection_logger.rb +8 -5
- data/lib/semantic_logger/log.rb +17 -17
- data/lib/semantic_logger/loggable.rb +6 -9
- data/lib/semantic_logger/logger.rb +0 -1
- data/lib/semantic_logger/metric/new_relic.rb +58 -55
- data/lib/semantic_logger/metric/signalfx.rb +108 -106
- data/lib/semantic_logger/metric/statsd.rb +2 -3
- data/lib/semantic_logger/processor.rb +9 -9
- data/lib/semantic_logger/semantic_logger.rb +50 -30
- data/lib/semantic_logger/subscriber.rb +0 -1
- data/lib/semantic_logger/utils.rb +37 -37
- data/lib/semantic_logger/version.rb +2 -2
- data/test/appender/async_batch_test.rb +0 -1
- data/test/appender/async_test.rb +0 -1
- data/test/appender/bugsnag_test.rb +7 -8
- data/test/appender/elasticsearch_http_test.rb +5 -6
- data/test/appender/elasticsearch_test.rb +14 -10
- data/test/appender/file_test.rb +5 -6
- data/test/appender/graylog_test.rb +8 -8
- data/test/appender/honeybadger_test.rb +6 -7
- data/test/appender/http_test.rb +4 -5
- data/test/appender/kafka_test.rb +5 -6
- data/test/appender/mongodb_test.rb +11 -13
- data/test/appender/new_relic_test.rb +8 -9
- data/test/appender/newrelic_rpm.rb +1 -1
- data/test/appender/sentry_test.rb +7 -8
- data/test/appender/splunk_http_test.rb +4 -4
- data/test/appender/splunk_test.rb +1 -3
- data/test/appender/syslog_test.rb +3 -5
- data/test/appender/tcp_test.rb +4 -5
- data/test/appender/udp_test.rb +4 -5
- data/test/appender/wrapper_test.rb +2 -3
- data/test/concerns/compatibility_test.rb +0 -1
- data/test/debug_as_trace_logger_test.rb +0 -1
- data/test/formatters/color_test.rb +5 -6
- data/test/formatters/default_test.rb +16 -17
- data/test/formatters/one_line_test.rb +1 -2
- data/test/formatters/signalfx_test.rb +8 -11
- data/test/formatters_test.rb +3 -3
- data/test/in_memory_appender.rb +0 -1
- data/test/in_memory_appender_helper.rb +1 -1
- data/test/in_memory_batch_appender.rb +0 -1
- data/test/in_memory_metrics_appender.rb +0 -1
- data/test/loggable_test.rb +2 -3
- data/test/logger_test.rb +11 -14
- data/test/measure_test.rb +13 -15
- data/test/metric/new_relic_test.rb +2 -3
- data/test/metric/signalfx_test.rb +4 -5
- data/test/semantic_logger_test.rb +28 -3
- data/test/test_helper.rb +6 -7
- metadata +34 -34
@@ -3,7 +3,7 @@ require 'socket'
|
|
3
3
|
|
4
4
|
module SemanticLogger
|
5
5
|
# Logging levels in order of most detailed to most severe
|
6
|
-
LEVELS = [
|
6
|
+
LEVELS = %i[trace debug info warn error fatal].freeze
|
7
7
|
|
8
8
|
# Return a logger for the supplied class or class_name
|
9
9
|
def self.[](klass)
|
@@ -35,7 +35,7 @@ module SemanticLogger
|
|
35
35
|
def self.backtrace_level=(level)
|
36
36
|
@backtrace_level = level
|
37
37
|
# For performance reasons pre-calculate the level index
|
38
|
-
@backtrace_level_index = level.nil? ?
|
38
|
+
@backtrace_level_index = level.nil? ? 65_535 : level_to_index(level)
|
39
39
|
end
|
40
40
|
|
41
41
|
# Returns the current backtrace level
|
@@ -45,14 +45,14 @@ module SemanticLogger
|
|
45
45
|
|
46
46
|
# Returns the current backtrace level index
|
47
47
|
# For internal use only
|
48
|
-
def self.backtrace_level_index
|
48
|
+
def self.backtrace_level_index
|
49
49
|
@backtrace_level_index
|
50
50
|
end
|
51
51
|
|
52
52
|
# Returns [String] name of this host for logging purposes
|
53
53
|
# Note: Not all appenders use `host`
|
54
54
|
def self.host
|
55
|
-
@host ||= Socket.gethostname.force_encoding(
|
55
|
+
@host ||= Socket.gethostname.force_encoding('UTF-8')
|
56
56
|
end
|
57
57
|
|
58
58
|
# Override the default host name
|
@@ -223,7 +223,7 @@ module SemanticLogger
|
|
223
223
|
# * This callback is called within the thread of the application making the logging call.
|
224
224
|
# * If these callbacks are slow they will slow down the application.
|
225
225
|
def self.on_log(object = nil, &block)
|
226
|
-
Processor.instance.on_log(object, &block)
|
226
|
+
Processor.instance.appender.on_log(object, &block)
|
227
227
|
end
|
228
228
|
|
229
229
|
# Add signal handlers for Semantic Logger
|
@@ -261,22 +261,26 @@ module SemanticLogger
|
|
261
261
|
# Note:
|
262
262
|
# To only register one of the signal handlers, set the other to nil
|
263
263
|
# Set gc_log_microseconds to nil to not enable JRuby Garbage collections
|
264
|
-
def self.add_signal_handler(log_level_signal='USR2', thread_dump_signal='TTIN', gc_log_microseconds=
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
Signal.trap(thread_dump_signal) do
|
273
|
-
logger = SemanticLogger['Thread Dump']
|
274
|
-
Thread.list.each do |thread|
|
275
|
-
# MRI re-uses the main thread for signals, JRuby uses `SIGTTIN handler` thread.
|
276
|
-
next if defined?(JRuby) && (thread == Thread.current)
|
277
|
-
logger.backtrace(thread: thread)
|
264
|
+
def self.add_signal_handler(log_level_signal = 'USR2', thread_dump_signal = 'TTIN', gc_log_microseconds = 100_000)
|
265
|
+
if log_level_signal
|
266
|
+
Signal.trap(log_level_signal) do
|
267
|
+
index = default_level == :trace ? LEVELS.find_index(:error) : LEVELS.find_index(default_level)
|
268
|
+
new_level = LEVELS[index - 1]
|
269
|
+
self['SemanticLogger'].warn "Changed global default log level to #{new_level.inspect}"
|
270
|
+
self.default_level = new_level
|
278
271
|
end
|
279
|
-
end
|
272
|
+
end
|
273
|
+
|
274
|
+
if thread_dump_signal
|
275
|
+
Signal.trap(thread_dump_signal) do
|
276
|
+
logger = SemanticLogger['Thread Dump']
|
277
|
+
Thread.list.each do |thread|
|
278
|
+
# MRI re-uses the main thread for signals, JRuby uses `SIGTTIN handler` thread.
|
279
|
+
next if defined?(JRuby) && (thread == Thread.current)
|
280
|
+
logger.backtrace(thread: thread)
|
281
|
+
end
|
282
|
+
end
|
283
|
+
end
|
280
284
|
|
281
285
|
if gc_log_microseconds && defined?(JRuby)
|
282
286
|
listener = SemanticLogger::JRuby::GarbageCollectionLogger.new(gc_log_microseconds)
|
@@ -360,9 +364,9 @@ module SemanticLogger
|
|
360
364
|
end
|
361
365
|
|
362
366
|
# Remove specified number of tags from the current tag list
|
363
|
-
def self.pop_tags(quantity=1)
|
367
|
+
def self.pop_tags(quantity = 1)
|
364
368
|
t = Thread.current[:semantic_logger_tags]
|
365
|
-
t
|
369
|
+
t&.pop(quantity)
|
366
370
|
end
|
367
371
|
|
368
372
|
# :nodoc
|
@@ -370,12 +374,11 @@ module SemanticLogger
|
|
370
374
|
return yield if hash.nil? || hash.empty?
|
371
375
|
raise(ArgumentError, '#named_tagged only accepts named parameters (Hash)') unless hash.is_a?(Hash)
|
372
376
|
|
373
|
-
t = Thread.current[:semantic_logger_named_tags] ||= []
|
374
377
|
begin
|
375
|
-
|
378
|
+
push_named_tags(hash)
|
376
379
|
yield
|
377
380
|
ensure
|
378
|
-
|
381
|
+
pop_named_tags
|
379
382
|
end
|
380
383
|
end
|
381
384
|
|
@@ -392,6 +395,16 @@ module SemanticLogger
|
|
392
395
|
end
|
393
396
|
end
|
394
397
|
|
398
|
+
def self.push_named_tags(hash)
|
399
|
+
(Thread.current[:semantic_logger_named_tags] ||= []) << hash
|
400
|
+
hash
|
401
|
+
end
|
402
|
+
|
403
|
+
def self.pop_named_tags(quantity = 1)
|
404
|
+
t = Thread.current[:semantic_logger_named_tags]
|
405
|
+
t&.pop(quantity)
|
406
|
+
end
|
407
|
+
|
395
408
|
# Silence noisy log levels by changing the default_level within the block
|
396
409
|
#
|
397
410
|
# This setting is thread-safe and only applies to the current thread
|
@@ -436,19 +449,19 @@ module SemanticLogger
|
|
436
449
|
Thread.current[:semantic_logger_silence] = current_index
|
437
450
|
end
|
438
451
|
|
439
|
-
private
|
440
|
-
|
441
|
-
@appenders = Concurrent::Array.new
|
442
|
-
|
443
452
|
def self.default_level_index
|
444
453
|
Thread.current[:semantic_logger_silence] || @default_level_index
|
445
454
|
end
|
446
455
|
|
456
|
+
# private_class_method :default_level_index
|
457
|
+
|
447
458
|
# Returns the symbolic level for the supplied level index
|
448
459
|
def self.index_to_level(level_index)
|
449
460
|
LEVELS[level_index]
|
450
461
|
end
|
451
462
|
|
463
|
+
# private_class_method :index_to_level
|
464
|
+
|
452
465
|
# Internal method to return the log level as an internal index
|
453
466
|
# Also supports mapping the ::Logger levels to SemanticLogger levels
|
454
467
|
def self.level_to_index(level)
|
@@ -465,7 +478,8 @@ module SemanticLogger
|
|
465
478
|
@map_levels ||= begin
|
466
479
|
levels = []
|
467
480
|
::Logger::Severity.constants.each do |constant|
|
468
|
-
levels[::Logger::Severity.const_get(constant)] =
|
481
|
+
levels[::Logger::Severity.const_get(constant)] =
|
482
|
+
LEVELS.find_index(constant.downcase.to_sym) || LEVELS.find_index(:error)
|
469
483
|
end
|
470
484
|
levels
|
471
485
|
end
|
@@ -475,6 +489,8 @@ module SemanticLogger
|
|
475
489
|
index
|
476
490
|
end
|
477
491
|
|
492
|
+
# private_class_method :level_to_index
|
493
|
+
|
478
494
|
# Backward compatibility
|
479
495
|
def self.convert_old_appender_args(appender, level)
|
480
496
|
options = {}
|
@@ -493,6 +509,10 @@ module SemanticLogger
|
|
493
509
|
options
|
494
510
|
end
|
495
511
|
|
512
|
+
private_class_method :convert_old_appender_args
|
513
|
+
|
514
|
+
@appenders = Concurrent::Array.new
|
515
|
+
|
496
516
|
# Initial default Level for all new instances of SemanticLogger::Logger
|
497
517
|
@default_level = :info
|
498
518
|
@default_level_index = level_to_index(@default_level)
|
@@ -1,47 +1,47 @@
|
|
1
|
-
module SemanticLogger
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
1
|
+
module SemanticLogger
|
2
|
+
module Utils
|
3
|
+
def self.constantize_symbol(symbol, namespace = 'SemanticLogger::Appender')
|
4
|
+
klass = "#{namespace}::#{camelize(symbol.to_s)}"
|
5
|
+
begin
|
6
|
+
if RUBY_VERSION.to_i >= 2
|
7
|
+
Object.const_get(klass)
|
8
|
+
else
|
9
|
+
klass.split('::').inject(Object) { |o, name| o.const_get(name) }
|
10
|
+
end
|
11
|
+
rescue NameError
|
12
|
+
raise(ArgumentError, "Could not convert symbol: #{symbol.inspect} to a class in: #{namespace}. Looking for: #{klass}")
|
10
13
|
end
|
11
|
-
rescue NameError
|
12
|
-
raise(ArgumentError, "Could not convert symbol: #{symbol.inspect} to a class in: #{namespace}. Looking for: #{klass}")
|
13
14
|
end
|
14
|
-
end
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
16
|
+
# Borrow from Rails, when not running Rails
|
17
|
+
def self.camelize(term)
|
18
|
+
string = term.to_s
|
19
|
+
string = string.sub(/^[a-z\d]*/, &:capitalize)
|
20
|
+
string.gsub!(/(?:_|(\/))([a-z\d]*)/i) { "#{Regexp.last_match(1)}#{Regexp.last_match(2).capitalize}" }
|
21
|
+
string.gsub!('/'.freeze, '::'.freeze)
|
22
|
+
string
|
23
|
+
end
|
24
24
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
25
|
+
# Returns the visibility for an instance method
|
26
|
+
def self.method_visibility(mod, method_name)
|
27
|
+
method_name = method_name.to_sym
|
28
|
+
if mod.instance_methods.include?(method_name)
|
29
|
+
:public
|
30
|
+
elsif mod.private_instance_methods.include?(method_name)
|
31
|
+
:private
|
32
|
+
elsif mod.protected_instance_methods.include?(method_name)
|
33
|
+
:protected
|
34
|
+
end
|
34
35
|
end
|
35
|
-
end
|
36
36
|
|
37
|
-
|
37
|
+
SELF_PATTERN = File.join('lib', 'semantic_logger')
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
39
|
+
# Extract the backtrace leaving out the last few Semantic Logger lines.
|
40
|
+
def self.cleanse_backtrace(stack = caller)
|
41
|
+
while (first = stack.first) && first.include?(SELF_PATTERN)
|
42
|
+
stack.shift
|
43
|
+
end
|
44
|
+
stack
|
43
45
|
end
|
44
|
-
stack
|
45
46
|
end
|
46
|
-
|
47
47
|
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
module SemanticLogger
|
2
|
-
VERSION = '4.2.
|
1
|
+
module SemanticLogger
|
2
|
+
VERSION = '4.2.1'.freeze
|
3
3
|
end
|
data/test/appender/async_test.rb
CHANGED
@@ -21,10 +21,10 @@ module Appender
|
|
21
21
|
level.to_s
|
22
22
|
end
|
23
23
|
exception = hash = nil
|
24
|
-
Bugsnag.stub(:notify, ->
|
24
|
+
Bugsnag.stub(:notify, ->(exc, h) { exception = exc; hash = h }) do
|
25
25
|
@appender.send(level, @message)
|
26
26
|
end
|
27
|
-
if [
|
27
|
+
if %i[trace debug].include?(level)
|
28
28
|
assert_nil exception
|
29
29
|
assert_nil hash
|
30
30
|
else
|
@@ -36,10 +36,10 @@ module Appender
|
|
36
36
|
|
37
37
|
it "sends #{level} custom attributes" do
|
38
38
|
exception = hash = nil
|
39
|
-
Bugsnag.stub(:notify, ->
|
40
|
-
@appender.send(level, @message,
|
39
|
+
Bugsnag.stub(:notify, ->(exc, h) { exception = exc; hash = h }) do
|
40
|
+
@appender.send(level, @message, key1: 1, key2: 'a')
|
41
41
|
end
|
42
|
-
if [
|
42
|
+
if %i[trace debug].include?(level)
|
43
43
|
assert_nil exception
|
44
44
|
assert_nil hash
|
45
45
|
else
|
@@ -54,10 +54,10 @@ module Appender
|
|
54
54
|
it "sends #{level} exceptions" do
|
55
55
|
error = RuntimeError.new('Hello World')
|
56
56
|
exception = hash = nil
|
57
|
-
Bugsnag.stub(:notify, ->
|
57
|
+
Bugsnag.stub(:notify, ->(exc, h) { exception = exc; hash = h }) do
|
58
58
|
@appender.send(level, @message, error)
|
59
59
|
end
|
60
|
-
if [
|
60
|
+
if %i[trace debug].include?(level)
|
61
61
|
assert_nil exception
|
62
62
|
assert_nil hash
|
63
63
|
else
|
@@ -67,7 +67,6 @@ module Appender
|
|
67
67
|
end
|
68
68
|
end
|
69
69
|
end
|
70
|
-
|
71
70
|
end
|
72
71
|
end
|
73
72
|
end
|
@@ -17,7 +17,7 @@ module Appender
|
|
17
17
|
|
18
18
|
it 'logs to daily indexes' do
|
19
19
|
index = nil
|
20
|
-
@appender.stub(:post, ->
|
20
|
+
@appender.stub(:post, ->(_json, ind) { index = ind }) do
|
21
21
|
@appender.info @message
|
22
22
|
end
|
23
23
|
assert_equal "/semantic_logger-#{Time.now.utc.strftime('%Y.%m.%d')}/log", index
|
@@ -26,7 +26,7 @@ module Appender
|
|
26
26
|
SemanticLogger::LEVELS.each do |level|
|
27
27
|
it "send #{level}" do
|
28
28
|
request = nil
|
29
|
-
@appender.http.stub(:request, ->
|
29
|
+
@appender.http.stub(:request, ->(r) { request = r; response_mock.new('200', 'ok') }) do
|
30
30
|
@appender.send(level, @message)
|
31
31
|
end
|
32
32
|
message = JSON.parse(request.body)
|
@@ -43,7 +43,7 @@ module Appender
|
|
43
43
|
exc = e
|
44
44
|
end
|
45
45
|
request = nil
|
46
|
-
@appender.http.stub(:request, ->
|
46
|
+
@appender.http.stub(:request, ->(r) { request = r; response_mock.new('200', 'ok') }) do
|
47
47
|
@appender.send(level, 'Reading File', exc)
|
48
48
|
end
|
49
49
|
hash = JSON.parse(request.body)
|
@@ -57,8 +57,8 @@ module Appender
|
|
57
57
|
|
58
58
|
it "sends #{level} custom attributes" do
|
59
59
|
request = nil
|
60
|
-
@appender.http.stub(:request, ->
|
61
|
-
@appender.send(level, @message,
|
60
|
+
@appender.http.stub(:request, ->(r) { request = r; response_mock.new('200', 'ok') }) do
|
61
|
+
@appender.send(level, @message, key1: 1, key2: 'a')
|
62
62
|
end
|
63
63
|
message = JSON.parse(request.body)
|
64
64
|
assert_equal @message, message['message']
|
@@ -69,7 +69,6 @@ module Appender
|
|
69
69
|
assert_equal 'a', payload['key2'], message
|
70
70
|
end
|
71
71
|
end
|
72
|
-
|
73
72
|
end
|
74
73
|
end
|
75
74
|
end
|
@@ -106,13 +106,15 @@ module Appender
|
|
106
106
|
request = stub_client { appender.batch(logs) }
|
107
107
|
|
108
108
|
assert body = request[:body]
|
109
|
-
assert_equal
|
110
|
-
index = body[0]['index']['_index']
|
111
|
-
assert_equal "semantic_logger-#{Time.now.strftime('%Y.%m.%d')}", index
|
109
|
+
assert_equal 6, body.size, body
|
112
110
|
|
111
|
+
index = "semantic_logger-#{Time.now.strftime('%Y.%m.%d')}"
|
112
|
+
assert_equal index, body[0]['index']['_index']
|
113
113
|
assert_equal 'hello world1', body[1][:message]
|
114
|
-
assert_equal
|
115
|
-
assert_equal 'hello
|
114
|
+
assert_equal index, body[2]['index']['_index']
|
115
|
+
assert_equal 'hello world2', body[3][:message]
|
116
|
+
assert_equal index, body[4]['index']['_index']
|
117
|
+
assert_equal 'hello world3', body[5][:message]
|
116
118
|
end
|
117
119
|
end
|
118
120
|
|
@@ -223,13 +225,15 @@ module Appender
|
|
223
225
|
request = stub_client { appender.batch(logs) }
|
224
226
|
|
225
227
|
assert body = request[:body]
|
226
|
-
assert_equal
|
227
|
-
index = body[0]['index']['_index']
|
228
|
-
assert_equal "semantic_logger-#{Time.now.strftime('%Y.%m.%d')}", index
|
228
|
+
assert_equal 6, body.size, body
|
229
229
|
|
230
|
+
index = "semantic_logger-#{Time.now.strftime('%Y.%m.%d')}"
|
231
|
+
assert_equal index, body[0]['index']['_index']
|
230
232
|
assert_equal 'hello world1', body[1][:message]
|
231
|
-
assert_equal
|
232
|
-
assert_equal 'hello
|
233
|
+
assert_equal index, body[2]['index']['_index']
|
234
|
+
assert_equal 'hello world2', body[3][:message]
|
235
|
+
assert_equal index, body[4]['index']['_index']
|
236
|
+
assert_equal 'hello world3', body[5][:message]
|
233
237
|
end
|
234
238
|
end
|
235
239
|
|
data/test/appender/file_test.rb
CHANGED
@@ -12,8 +12,8 @@ module Appender
|
|
12
12
|
@time = Time.new
|
13
13
|
@io = StringIO.new
|
14
14
|
@appender = SemanticLogger::Appender::File.new(io: @io)
|
15
|
-
@hash = {session_id: 'HSSKLEU@JDK767', tracking_number:
|
16
|
-
@hash_str = @hash.inspect.sub(
|
15
|
+
@hash = {session_id: 'HSSKLEU@JDK767', tracking_number: 12_345}
|
16
|
+
@hash_str = @hash.inspect.sub('{', '\\{').sub('}', '\\}')
|
17
17
|
@thread_name = Thread.current.name
|
18
18
|
@file_name_reg_exp = RUBY_VERSION.to_f <= 2.0 ? ' (mock|file_test).rb:\d+' : ' file_test.rb:\d+'
|
19
19
|
end
|
@@ -88,15 +88,15 @@ module Appender
|
|
88
88
|
describe 'custom formatter' do
|
89
89
|
before do
|
90
90
|
@appender = SemanticLogger::Appender::File.new(io: @io) do |log|
|
91
|
-
tags = log.tags.collect { |tag| "[#{tag}]" }.join(' ') + ' ' if log.tags
|
91
|
+
tags = log.tags.collect { |tag| "[#{tag}]" }.join(' ') + ' ' if log.tags&.size&.positive?
|
92
92
|
|
93
93
|
message = log.message.to_s
|
94
94
|
message << ' -- ' << log.payload.inspect if log.payload
|
95
95
|
message << ' -- ' << "#{log.exception.class}: #{log.exception.message}\n#{(log.exception.backtrace || []).join("\n")}" if log.exception
|
96
96
|
|
97
|
-
duration_str = log.duration ? " (#{'%.1f'
|
97
|
+
duration_str = log.duration ? " (#{format('%.1f', log.duration)}ms)" : ''
|
98
98
|
|
99
|
-
"#{log.formatted_time} #{log.level.to_s.upcase} [#{
|
99
|
+
"#{log.formatted_time} #{log.level.to_s.upcase} [#{$PROCESS_ID}:#{log.thread_name}] #{tags}#{log.name} -- #{message}#{duration_str}"
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
@@ -105,7 +105,6 @@ module Appender
|
|
105
105
|
assert_match(/\d+-\d+-\d+ \d+:\d+:\d+.\d+ DEBUG \[\d+:#{@thread_name}\] SemanticLogger::Appender::File -- \n/, @io.string)
|
106
106
|
end
|
107
107
|
end
|
108
|
-
|
109
108
|
end
|
110
109
|
end
|
111
110
|
end
|