semantic_logger 4.3.1 → 4.4.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 +4 -4
- data/lib/semantic_logger.rb +7 -1
- data/lib/semantic_logger/appender.rb +3 -0
- data/lib/semantic_logger/appender/async.rb +29 -10
- data/lib/semantic_logger/appender/rabbitmq.rb +120 -0
- data/lib/semantic_logger/appenders.rb +89 -0
- data/lib/semantic_logger/base.rb +3 -3
- data/lib/semantic_logger/concerns/compatibility.rb +2 -2
- data/lib/semantic_logger/formatters.rb +1 -0
- data/lib/semantic_logger/formatters/base.rb +28 -6
- data/lib/semantic_logger/formatters/color.rb +4 -3
- data/lib/semantic_logger/formatters/fluentd.rb +37 -0
- data/lib/semantic_logger/formatters/json.rb +4 -2
- data/lib/semantic_logger/formatters/raw.rb +2 -2
- data/lib/semantic_logger/formatters/signalfx.rb +4 -3
- data/lib/semantic_logger/levels.rb +38 -0
- data/lib/semantic_logger/log.rb +11 -6
- data/lib/semantic_logger/loggable.rb +1 -1
- data/lib/semantic_logger/logger.rb +43 -1
- data/lib/semantic_logger/processor.rb +10 -130
- data/lib/semantic_logger/reporters/minitest.rb +49 -0
- data/lib/semantic_logger/semantic_logger.rb +40 -75
- data/lib/semantic_logger/version.rb +1 -1
- metadata +9 -81
- data/test/appender/async_batch_test.rb +0 -60
- data/test/appender/async_test.rb +0 -44
- data/test/appender/bugsnag_test.rb +0 -81
- data/test/appender/elasticsearch_http_test.rb +0 -74
- data/test/appender/elasticsearch_test.rb +0 -248
- data/test/appender/file_test.rb +0 -120
- data/test/appender/graylog_test.rb +0 -82
- data/test/appender/honeybadger_test.rb +0 -45
- data/test/appender/http_test.rb +0 -63
- data/test/appender/kafka_test.rb +0 -35
- data/test/appender/mongodb_test.rb +0 -104
- data/test/appender/new_relic_test.rb +0 -80
- data/test/appender/newrelic_rpm.rb +0 -14
- data/test/appender/sentry_test.rb +0 -47
- data/test/appender/splunk_http_test.rb +0 -79
- data/test/appender/splunk_test.rb +0 -83
- data/test/appender/syslog_test.rb +0 -61
- data/test/appender/tcp_test.rb +0 -66
- data/test/appender/udp_test.rb +0 -59
- data/test/appender/wrapper_test.rb +0 -95
- data/test/concerns/compatibility_test.rb +0 -117
- data/test/debug_as_trace_logger_test.rb +0 -81
- data/test/formatters/color_test.rb +0 -153
- data/test/formatters/default_test.rb +0 -175
- data/test/formatters/one_line_test.rb +0 -60
- data/test/formatters/signalfx_test.rb +0 -197
- data/test/formatters_test.rb +0 -36
- data/test/in_memory_appender.rb +0 -8
- data/test/in_memory_appender_helper.rb +0 -43
- data/test/in_memory_batch_appender.rb +0 -8
- data/test/in_memory_metrics_appender.rb +0 -13
- data/test/loggable_test.rb +0 -103
- data/test/logger_test.rb +0 -334
- data/test/measure_test.rb +0 -346
- data/test/metric/new_relic_test.rb +0 -35
- data/test/metric/signalfx_test.rb +0 -77
- data/test/semantic_logger_test.rb +0 -303
- data/test/test_helper.rb +0 -31
@@ -1,117 +0,0 @@
|
|
1
|
-
require_relative '../test_helper'
|
2
|
-
|
3
|
-
class TestLogger < Minitest::Test
|
4
|
-
describe SemanticLogger::Logger do
|
5
|
-
include InMemoryAppenderHelper
|
6
|
-
|
7
|
-
it '#add' do
|
8
|
-
logger.add(Logger::INFO, 'hello world', 'progname') { 'Data' }
|
9
|
-
|
10
|
-
assert log = log_message
|
11
|
-
assert_equal 'hello world -- progname -- Data', log.message
|
12
|
-
assert_equal :info, log.level
|
13
|
-
end
|
14
|
-
|
15
|
-
it '#log' do
|
16
|
-
logger.log(Logger::FATAL, 'hello world', 'progname') { 'Data' }
|
17
|
-
|
18
|
-
assert log = log_message
|
19
|
-
assert_equal 'hello world -- progname -- Data', log.message
|
20
|
-
assert_equal :fatal, log.level
|
21
|
-
end
|
22
|
-
|
23
|
-
it '#unknown' do
|
24
|
-
logger.unknown('hello world') { 'Data' }
|
25
|
-
|
26
|
-
assert log = log_message
|
27
|
-
assert_equal 'hello world -- Data', log.message
|
28
|
-
assert_equal :error, log.level
|
29
|
-
assert_equal 'TestLogger', log.name
|
30
|
-
end
|
31
|
-
|
32
|
-
it '#unknown? as error?' do
|
33
|
-
SemanticLogger.default_level = :error
|
34
|
-
assert logger.unknown?
|
35
|
-
logger.log(Logger::UNKNOWN, 'hello world', 'progname') { 'Data' }
|
36
|
-
|
37
|
-
assert log = log_message
|
38
|
-
assert_equal 'hello world -- progname -- Data', log.message
|
39
|
-
assert_equal :error, log.level
|
40
|
-
end
|
41
|
-
|
42
|
-
it '#unknown? as error? when false' do
|
43
|
-
SemanticLogger.default_level = :fatal
|
44
|
-
refute logger.unknown?
|
45
|
-
logger.log(Logger::UNKNOWN, 'hello world', 'progname') { 'Data' }
|
46
|
-
|
47
|
-
refute log_message
|
48
|
-
end
|
49
|
-
|
50
|
-
it '#silence_logger' do
|
51
|
-
logger.silence_logger do
|
52
|
-
logger.info 'hello world'
|
53
|
-
end
|
54
|
-
refute log_message
|
55
|
-
end
|
56
|
-
|
57
|
-
it '#<< as info' do
|
58
|
-
logger << 'hello world'
|
59
|
-
|
60
|
-
assert log = log_message
|
61
|
-
assert_equal 'hello world', log.message
|
62
|
-
assert_equal :info, log.level
|
63
|
-
end
|
64
|
-
|
65
|
-
it '#progname= as #name=' do
|
66
|
-
assert_equal 'TestLogger', logger.name
|
67
|
-
logger.progname = 'NewTest'
|
68
|
-
assert_equal 'NewTest', logger.name
|
69
|
-
end
|
70
|
-
|
71
|
-
it '#progname as #name' do
|
72
|
-
assert_equal 'TestLogger', logger.name
|
73
|
-
assert_equal 'TestLogger', logger.progname
|
74
|
-
end
|
75
|
-
|
76
|
-
it '#sev_threshold= as #level=' do
|
77
|
-
assert_equal :trace, logger.level
|
78
|
-
logger.sev_threshold = Logger::DEBUG
|
79
|
-
assert_equal :debug, logger.level
|
80
|
-
end
|
81
|
-
|
82
|
-
it '#sev_threshold as #level' do
|
83
|
-
assert_equal :trace, logger.level
|
84
|
-
assert_equal :trace, logger.sev_threshold
|
85
|
-
end
|
86
|
-
|
87
|
-
it '#formatter NOOP' do
|
88
|
-
assert_nil logger.formatter
|
89
|
-
logger.formatter = 'blah'
|
90
|
-
assert_equal 'blah', logger.formatter
|
91
|
-
end
|
92
|
-
|
93
|
-
it '#datetime_format NOOP' do
|
94
|
-
assert_nil logger.datetime_format
|
95
|
-
logger.datetime_format = 'blah'
|
96
|
-
assert_equal 'blah', logger.datetime_format
|
97
|
-
end
|
98
|
-
|
99
|
-
it '#close NOOP' do
|
100
|
-
logger.close
|
101
|
-
logger.info('hello world')
|
102
|
-
|
103
|
-
assert log = log_message
|
104
|
-
assert_equal 'hello world', log.message
|
105
|
-
assert_equal :info, log.level
|
106
|
-
end
|
107
|
-
|
108
|
-
it '#reopen NOOP' do
|
109
|
-
logger.reopen
|
110
|
-
logger.info('hello world')
|
111
|
-
|
112
|
-
assert log = log_message
|
113
|
-
assert_equal 'hello world', log.message
|
114
|
-
assert_equal :info, log.level
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
@@ -1,81 +0,0 @@
|
|
1
|
-
require_relative 'test_helper'
|
2
|
-
|
3
|
-
class DebugAsTraceLoggerTest < Minitest::Test
|
4
|
-
describe SemanticLogger::Logger do
|
5
|
-
describe '.level?' do
|
6
|
-
let :logger do
|
7
|
-
SemanticLogger::DebugAsTraceLogger.new('TestLogger')
|
8
|
-
end
|
9
|
-
|
10
|
-
it 'return true for debug? with :trace level' do
|
11
|
-
SemanticLogger.default_level = :trace
|
12
|
-
assert_equal :trace, logger.level
|
13
|
-
assert_equal true, logger.debug?
|
14
|
-
assert_equal true, logger.trace?
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'return false for debug? with global :debug level' do
|
18
|
-
SemanticLogger.default_level = :debug
|
19
|
-
assert_equal :debug, logger.level, logger
|
20
|
-
assert logger.info?, logger.inspect
|
21
|
-
refute logger.debug?, logger.inspect
|
22
|
-
refute logger.trace?, logger.inspect
|
23
|
-
end
|
24
|
-
|
25
|
-
it 'return true for debug? with global :info level' do
|
26
|
-
SemanticLogger.default_level = :info
|
27
|
-
assert_equal :info, logger.level, logger.inspect
|
28
|
-
refute logger.debug?, logger.inspect
|
29
|
-
refute logger.trace?, logger.inspect
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'return false for debug? with instance :debug level' do
|
33
|
-
logger.level = :debug
|
34
|
-
assert_equal :debug, logger.level, logger.inspect
|
35
|
-
refute logger.debug?, logger.inspect
|
36
|
-
refute logger.trace?, logger.inspect
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'return true for debug? with instance :info level' do
|
40
|
-
logger.level = :info
|
41
|
-
assert_equal :info, logger.level, logger.inspect
|
42
|
-
refute logger.debug?, logger.inspect
|
43
|
-
refute logger.trace?, logger.inspect
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
describe 'log' do
|
48
|
-
include InMemoryAppenderHelper
|
49
|
-
|
50
|
-
let :logger do
|
51
|
-
SemanticLogger::DebugAsTraceLogger.new('TestLogger')
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'not log trace when level is debug' do
|
55
|
-
logger.level = :debug
|
56
|
-
logger.trace('hello world', payload) { 'Calculations' }
|
57
|
-
refute log_message
|
58
|
-
end
|
59
|
-
|
60
|
-
it 'not log debug when level is debug' do
|
61
|
-
logger.level = :debug
|
62
|
-
logger.debug('hello world', payload) { 'Calculations' }
|
63
|
-
refute log_message
|
64
|
-
end
|
65
|
-
|
66
|
-
it 'map debug to trace' do
|
67
|
-
logger.level = :trace
|
68
|
-
logger.debug('hello world')
|
69
|
-
assert log = log_message
|
70
|
-
assert_equal :trace, log.level
|
71
|
-
end
|
72
|
-
|
73
|
-
it 'log trace as trace' do
|
74
|
-
logger.level = :trace
|
75
|
-
logger.trace('hello world', payload) { 'Calculations' }
|
76
|
-
assert log = log_message
|
77
|
-
assert_equal :trace, log.level
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
@@ -1,153 +0,0 @@
|
|
1
|
-
require_relative '../test_helper'
|
2
|
-
|
3
|
-
module SemanticLogger
|
4
|
-
module Formatters
|
5
|
-
class ColorTest < Minitest::Test
|
6
|
-
describe Color do
|
7
|
-
let(:log_time) do
|
8
|
-
Time.utc(2017, 1, 14, 8, 32, 5.375276)
|
9
|
-
end
|
10
|
-
|
11
|
-
let(:level) do
|
12
|
-
:debug
|
13
|
-
end
|
14
|
-
|
15
|
-
let(:log) do
|
16
|
-
# :level, :thread_name, :name, :message, :payload, :time, :duration, :tags, :level_index, :exception, :metric, :backtrace, :metric_amount, :named_tags
|
17
|
-
log = SemanticLogger::Log.new('ColorTest', level)
|
18
|
-
log.time = log_time
|
19
|
-
log
|
20
|
-
end
|
21
|
-
|
22
|
-
let(:expected_time) do
|
23
|
-
SemanticLogger::Formatters::Base::PRECISION == 3 ? '2017-01-14 08:32:05.375' : '2017-01-14 08:32:05.375276'
|
24
|
-
end
|
25
|
-
|
26
|
-
let(:set_exception) do
|
27
|
-
begin
|
28
|
-
raise 'Oh no'
|
29
|
-
rescue Exception => exc
|
30
|
-
log.exception = exc
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
let(:backtrace) do
|
35
|
-
[
|
36
|
-
"test/formatters/default_test.rb:35:in `block (2 levels) in <class:DefaultTest>'",
|
37
|
-
"gems/ruby-2.3.3/gems/minitest-5.10.1/lib/minitest/spec.rb:247:in `instance_eval'",
|
38
|
-
"gems/ruby-2.3.3/gems/minitest-5.10.1/lib/minitest/spec.rb:247:in `block (2 levels) in let'",
|
39
|
-
"gems/ruby-2.3.3/gems/minitest-5.10.1/lib/minitest/spec.rb:247:in `fetch'",
|
40
|
-
"ruby-2.3.3/gems/minitest-5.10.1/lib/minitest/spec.rb:247:in `block in let'",
|
41
|
-
"test/formatters/default_test.rb:65:in `block (3 levels) in <class:DefaultTest>'",
|
42
|
-
"ruby-2.3.3/gems/minitest-5.10.1/lib/minitest/test.rb:105:in `block (3 levels) in run'"
|
43
|
-
]
|
44
|
-
end
|
45
|
-
|
46
|
-
let(:bold) do
|
47
|
-
SemanticLogger::AnsiColors::BOLD
|
48
|
-
end
|
49
|
-
|
50
|
-
let(:clear) do
|
51
|
-
SemanticLogger::AnsiColors::CLEAR
|
52
|
-
end
|
53
|
-
|
54
|
-
let(:color) do
|
55
|
-
SemanticLogger::AnsiColors::GREEN
|
56
|
-
end
|
57
|
-
|
58
|
-
let(:formatter) do
|
59
|
-
formatter = SemanticLogger::Formatters::Color.new
|
60
|
-
# Does not use the logger instance for formatting purposes
|
61
|
-
formatter.call(log, nil)
|
62
|
-
formatter
|
63
|
-
end
|
64
|
-
|
65
|
-
describe 'level' do
|
66
|
-
it 'logs single character' do
|
67
|
-
assert_equal "#{color}D#{clear}", formatter.level
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
describe 'tags' do
|
72
|
-
it 'logs tags' do
|
73
|
-
log.tags = %w[first second third]
|
74
|
-
assert_equal "[#{color}first#{clear}] [#{color}second#{clear}] [#{color}third#{clear}]", formatter.tags
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
describe 'named_tags' do
|
79
|
-
it 'logs named tags' do
|
80
|
-
log.named_tags = {first: 1, second: 2, third: 3}
|
81
|
-
assert_equal "{#{color}first: 1#{clear}, #{color}second: 2#{clear}, #{color}third: 3#{clear}}", formatter.named_tags
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
describe 'duration' do
|
86
|
-
it 'logs long duration' do
|
87
|
-
log.duration = 1_000_000.34567
|
88
|
-
assert_equal "(#{bold}16m 40s#{clear})", formatter.duration
|
89
|
-
end
|
90
|
-
|
91
|
-
it 'logs short duration' do
|
92
|
-
log.duration = 1.34567
|
93
|
-
duration = SemanticLogger::Formatters::Base::PRECISION == 3 ? "(#{bold}1ms#{clear})" : "(#{bold}1.346ms#{clear})"
|
94
|
-
assert_equal duration, formatter.duration
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
describe 'name' do
|
99
|
-
it 'logs name' do
|
100
|
-
assert_equal "#{color}ColorTest#{clear}", formatter.name
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
describe 'payload' do
|
105
|
-
it 'logs hash payload' do
|
106
|
-
log.payload = {first: 1, second: 2, third: 3}
|
107
|
-
assert_equal "-- #{log.payload.ai(multiline: false)}", formatter.payload
|
108
|
-
end
|
109
|
-
|
110
|
-
it 'skips nil payload' do
|
111
|
-
refute formatter.payload
|
112
|
-
end
|
113
|
-
|
114
|
-
it 'skips empty payload' do
|
115
|
-
log.payload = {}
|
116
|
-
refute formatter.payload
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
describe 'exception' do
|
121
|
-
it 'logs exception' do
|
122
|
-
set_exception
|
123
|
-
str = "-- Exception: #{color}RuntimeError: Oh no#{clear}\n"
|
124
|
-
assert_equal str, formatter.exception.lines.first
|
125
|
-
end
|
126
|
-
|
127
|
-
it 'skips nil exception' do
|
128
|
-
refute formatter.exception
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
describe 'call' do
|
133
|
-
it 'returns minimal elements' do
|
134
|
-
assert_equal "#{expected_time} #{color}D#{clear} [#{$$}:#{Thread.current.name}] #{color}ColorTest#{clear}", formatter.call(log, nil)
|
135
|
-
end
|
136
|
-
|
137
|
-
it 'retuns all elements' do
|
138
|
-
log.tags = %w[first second third]
|
139
|
-
log.named_tags = {first: 1, second: 2, third: 3}
|
140
|
-
log.duration = 1.34567
|
141
|
-
log.message = 'Hello World'
|
142
|
-
log.payload = {first: 1, second: 2, third: 3}
|
143
|
-
log.backtrace = backtrace
|
144
|
-
set_exception
|
145
|
-
duration = SemanticLogger::Formatters::Base::PRECISION == 3 ? '1' : '1.346'
|
146
|
-
str = "#{expected_time} #{color}D#{clear} [#{$$}:#{Thread.current.name} default_test.rb:35] [#{color}first#{clear}] [#{color}second#{clear}] [#{color}third#{clear}] {#{color}first: 1#{clear}, #{color}second: 2#{clear}, #{color}third: 3#{clear}} (#{bold}#{duration}ms#{clear}) #{color}ColorTest#{clear} -- Hello World -- #{{first: 1, second: 2, third: 3}.ai(multiline: false)} -- Exception: #{color}RuntimeError: Oh no#{clear}\n"
|
147
|
-
assert_equal str, formatter.call(log, nil).lines.first
|
148
|
-
end
|
149
|
-
end
|
150
|
-
end
|
151
|
-
end
|
152
|
-
end
|
153
|
-
end
|
@@ -1,175 +0,0 @@
|
|
1
|
-
require_relative '../test_helper'
|
2
|
-
|
3
|
-
module SemanticLogger
|
4
|
-
module Formatters
|
5
|
-
class DefaultTest < Minitest::Test
|
6
|
-
describe Default do
|
7
|
-
let(:log_time) do
|
8
|
-
Time.utc(2017, 1, 14, 8, 32, 5.375276)
|
9
|
-
end
|
10
|
-
|
11
|
-
let(:level) do
|
12
|
-
:debug
|
13
|
-
end
|
14
|
-
|
15
|
-
let(:log) do
|
16
|
-
# :level, :thread_name, :name, :message, :payload, :time, :duration, :tags, :level_index, :exception, :metric, :backtrace, :metric_amount, :named_tags
|
17
|
-
log = SemanticLogger::Log.new('DefaultTest', level)
|
18
|
-
log.time = log_time
|
19
|
-
log
|
20
|
-
end
|
21
|
-
|
22
|
-
let(:expected_time) do
|
23
|
-
SemanticLogger::Formatters::Base::PRECISION == 3 ? '2017-01-14 08:32:05.375' : '2017-01-14 08:32:05.375276'
|
24
|
-
end
|
25
|
-
|
26
|
-
let(:set_exception) do
|
27
|
-
begin
|
28
|
-
raise 'Oh no'
|
29
|
-
rescue Exception => exc
|
30
|
-
log.exception = exc
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
let(:backtrace) do
|
35
|
-
[
|
36
|
-
"test/formatters/default_test.rb:99:in `block (2 levels) in <class:DefaultTest>'",
|
37
|
-
"gems/ruby-2.3.3/gems/minitest-5.10.1/lib/minitest/spec.rb:247:in `instance_eval'",
|
38
|
-
"gems/ruby-2.3.3/gems/minitest-5.10.1/lib/minitest/spec.rb:247:in `block (2 levels) in let'",
|
39
|
-
"gems/ruby-2.3.3/gems/minitest-5.10.1/lib/minitest/spec.rb:247:in `fetch'",
|
40
|
-
"ruby-2.3.3/gems/minitest-5.10.1/lib/minitest/spec.rb:247:in `block in let'",
|
41
|
-
"test/formatters/default_test.rb:65:in `block (3 levels) in <class:DefaultTest>'",
|
42
|
-
"ruby-2.3.3/gems/minitest-5.10.1/lib/minitest/test.rb:105:in `block (3 levels) in run'"
|
43
|
-
]
|
44
|
-
end
|
45
|
-
|
46
|
-
let(:formatter) do
|
47
|
-
formatter = SemanticLogger::Formatters::Default.new
|
48
|
-
# Does not use the logger instance for formatting purposes
|
49
|
-
formatter.call(log, nil)
|
50
|
-
formatter
|
51
|
-
end
|
52
|
-
|
53
|
-
describe 'time' do
|
54
|
-
it 'logs time' do
|
55
|
-
assert_equal expected_time, formatter.time
|
56
|
-
end
|
57
|
-
|
58
|
-
it 'supports time_format' do
|
59
|
-
formatter = SemanticLogger::Formatters::Default.new(time_format: '%H:%M:%S')
|
60
|
-
formatter.call(log, nil)
|
61
|
-
assert_equal '08:32:05', formatter.time
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
describe 'level' do
|
66
|
-
it 'logs single character' do
|
67
|
-
assert_equal 'D', formatter.level
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
describe 'process_info' do
|
72
|
-
it 'logs pid and thread name' do
|
73
|
-
assert_equal "[#{$$}:#{Thread.current.name}]", formatter.process_info
|
74
|
-
end
|
75
|
-
|
76
|
-
it 'logs pid, thread name, and file name' do
|
77
|
-
set_exception
|
78
|
-
log.backtrace = backtrace
|
79
|
-
assert_equal "[#{$$}:#{Thread.current.name} default_test.rb:99]", formatter.process_info
|
80
|
-
end
|
81
|
-
end
|
82
|
-
|
83
|
-
describe 'tags' do
|
84
|
-
it 'logs tags' do
|
85
|
-
log.tags = %w[first second third]
|
86
|
-
assert_equal '[first] [second] [third]', formatter.tags
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
describe 'named_tags' do
|
91
|
-
it 'logs named tags' do
|
92
|
-
log.named_tags = {first: 1, second: 2, third: 3}
|
93
|
-
assert_equal '{first: 1, second: 2, third: 3}', formatter.named_tags
|
94
|
-
end
|
95
|
-
end
|
96
|
-
|
97
|
-
describe 'duration' do
|
98
|
-
it 'logs long duration' do
|
99
|
-
log.duration = 1_000_000.34567
|
100
|
-
assert_equal '(16m 40s)', formatter.duration
|
101
|
-
end
|
102
|
-
|
103
|
-
it 'logs short duration' do
|
104
|
-
log.duration = 1.34567
|
105
|
-
duration = SemanticLogger::Formatters::Base::PRECISION == 3 ? '(1ms)' : '(1.346ms)'
|
106
|
-
assert_equal duration, formatter.duration
|
107
|
-
end
|
108
|
-
end
|
109
|
-
|
110
|
-
describe 'name' do
|
111
|
-
it 'logs name' do
|
112
|
-
assert_equal 'DefaultTest', formatter.name
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
describe 'message' do
|
117
|
-
it 'logs message' do
|
118
|
-
log.message = 'Hello World'
|
119
|
-
assert_equal '-- Hello World', formatter.message
|
120
|
-
end
|
121
|
-
|
122
|
-
it 'skips empty message' do
|
123
|
-
refute formatter.message
|
124
|
-
end
|
125
|
-
end
|
126
|
-
|
127
|
-
describe 'payload' do
|
128
|
-
it 'logs hash payload' do
|
129
|
-
log.payload = {first: 1, second: 2, third: 3}
|
130
|
-
assert_equal '-- {:first=>1, :second=>2, :third=>3}', formatter.payload
|
131
|
-
end
|
132
|
-
|
133
|
-
it 'skips nil payload' do
|
134
|
-
refute formatter.payload
|
135
|
-
end
|
136
|
-
|
137
|
-
it 'skips empty payload' do
|
138
|
-
log.payload = {}
|
139
|
-
refute formatter.payload
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
describe 'exception' do
|
144
|
-
it 'logs exception' do
|
145
|
-
set_exception
|
146
|
-
assert_match /-- Exception: RuntimeError: Oh no/, formatter.exception
|
147
|
-
end
|
148
|
-
|
149
|
-
it 'skips nil exception' do
|
150
|
-
refute formatter.exception
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
describe 'call' do
|
155
|
-
it 'returns minimal elements' do
|
156
|
-
assert_equal "#{expected_time} D [#{$$}:#{Thread.current.name}] DefaultTest", formatter.call(log, nil)
|
157
|
-
end
|
158
|
-
|
159
|
-
it 'retuns all elements' do
|
160
|
-
log.tags = %w[first second third]
|
161
|
-
log.named_tags = {first: 1, second: 2, third: 3}
|
162
|
-
log.duration = 1.34567
|
163
|
-
log.message = 'Hello World'
|
164
|
-
log.payload = {first: 1, second: 2, third: 3}
|
165
|
-
log.backtrace = backtrace
|
166
|
-
set_exception
|
167
|
-
duration = SemanticLogger::Formatters::Base::PRECISION == 3 ? '1' : '1.346'
|
168
|
-
str = "#{expected_time} D [#{$$}:#{Thread.current.name} default_test.rb:99] [first] [second] [third] {first: 1, second: 2, third: 3} (#{duration}ms) DefaultTest -- Hello World -- {:first=>1, :second=>2, :third=>3} -- Exception: RuntimeError: Oh no\n"
|
169
|
-
assert_equal str, formatter.call(log, nil).lines.first
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|