semantic_logger 4.3.1 → 4.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/lib/semantic_logger.rb +7 -1
  3. data/lib/semantic_logger/appender.rb +3 -0
  4. data/lib/semantic_logger/appender/async.rb +29 -10
  5. data/lib/semantic_logger/appender/rabbitmq.rb +120 -0
  6. data/lib/semantic_logger/appenders.rb +89 -0
  7. data/lib/semantic_logger/base.rb +3 -3
  8. data/lib/semantic_logger/concerns/compatibility.rb +2 -2
  9. data/lib/semantic_logger/formatters.rb +1 -0
  10. data/lib/semantic_logger/formatters/base.rb +28 -6
  11. data/lib/semantic_logger/formatters/color.rb +4 -3
  12. data/lib/semantic_logger/formatters/fluentd.rb +37 -0
  13. data/lib/semantic_logger/formatters/json.rb +4 -2
  14. data/lib/semantic_logger/formatters/raw.rb +2 -2
  15. data/lib/semantic_logger/formatters/signalfx.rb +4 -3
  16. data/lib/semantic_logger/levels.rb +38 -0
  17. data/lib/semantic_logger/log.rb +11 -6
  18. data/lib/semantic_logger/loggable.rb +1 -1
  19. data/lib/semantic_logger/logger.rb +43 -1
  20. data/lib/semantic_logger/processor.rb +10 -130
  21. data/lib/semantic_logger/reporters/minitest.rb +49 -0
  22. data/lib/semantic_logger/semantic_logger.rb +40 -75
  23. data/lib/semantic_logger/version.rb +1 -1
  24. metadata +9 -81
  25. data/test/appender/async_batch_test.rb +0 -60
  26. data/test/appender/async_test.rb +0 -44
  27. data/test/appender/bugsnag_test.rb +0 -81
  28. data/test/appender/elasticsearch_http_test.rb +0 -74
  29. data/test/appender/elasticsearch_test.rb +0 -248
  30. data/test/appender/file_test.rb +0 -120
  31. data/test/appender/graylog_test.rb +0 -82
  32. data/test/appender/honeybadger_test.rb +0 -45
  33. data/test/appender/http_test.rb +0 -63
  34. data/test/appender/kafka_test.rb +0 -35
  35. data/test/appender/mongodb_test.rb +0 -104
  36. data/test/appender/new_relic_test.rb +0 -80
  37. data/test/appender/newrelic_rpm.rb +0 -14
  38. data/test/appender/sentry_test.rb +0 -47
  39. data/test/appender/splunk_http_test.rb +0 -79
  40. data/test/appender/splunk_test.rb +0 -83
  41. data/test/appender/syslog_test.rb +0 -61
  42. data/test/appender/tcp_test.rb +0 -66
  43. data/test/appender/udp_test.rb +0 -59
  44. data/test/appender/wrapper_test.rb +0 -95
  45. data/test/concerns/compatibility_test.rb +0 -117
  46. data/test/debug_as_trace_logger_test.rb +0 -81
  47. data/test/formatters/color_test.rb +0 -153
  48. data/test/formatters/default_test.rb +0 -175
  49. data/test/formatters/one_line_test.rb +0 -60
  50. data/test/formatters/signalfx_test.rb +0 -197
  51. data/test/formatters_test.rb +0 -36
  52. data/test/in_memory_appender.rb +0 -8
  53. data/test/in_memory_appender_helper.rb +0 -43
  54. data/test/in_memory_batch_appender.rb +0 -8
  55. data/test/in_memory_metrics_appender.rb +0 -13
  56. data/test/loggable_test.rb +0 -103
  57. data/test/logger_test.rb +0 -334
  58. data/test/measure_test.rb +0 -346
  59. data/test/metric/new_relic_test.rb +0 -35
  60. data/test/metric/signalfx_test.rb +0 -77
  61. data/test/semantic_logger_test.rb +0 -303
  62. data/test/test_helper.rb +0 -31
@@ -1,82 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- # Unit Test for SemanticLogger::Appender::Graylog
4
- module Appender
5
- class GraylogTest < Minitest::Test
6
- describe SemanticLogger::Appender::Graylog do
7
- before do
8
- @appender = SemanticLogger::Appender::Graylog.new(level: :info)
9
- @message = 'AppenderGraylogTest log message'
10
- end
11
-
12
- (SemanticLogger::LEVELS - %i[info warn error fatal]).each do |level|
13
- it "not send :#{level} notifications to Graylog" do
14
- hash = nil
15
- @appender.notifier.stub(:notify!, ->(h) { hash = h }) do
16
- @appender.send(level, "AppenderGraylogTest #{level} message")
17
- end
18
- assert_nil hash
19
- end
20
- end
21
-
22
- it 'send exception notifications to Graylog with severity' do
23
- hash = nil
24
- exc = nil
25
- begin
26
- Uh oh
27
- rescue Exception => e
28
- exc = e
29
- end
30
- @appender.notifier.stub(:notify!, ->(h) { hash = h }) do
31
- @appender.error 'Reading File', exc
32
- end
33
- assert_equal 'Reading File', hash[:short_message]
34
- assert_equal 'NameError', hash[:exception][:name]
35
- assert_match 'undefined local variable or method', hash[:exception][:message]
36
- assert_equal 3, hash[:level], 'Should be error level (3)'
37
- assert hash[:exception][:stack_trace].first.include?(__FILE__), hash[:exception]
38
- end
39
-
40
- it 'send exception notifications to Graylog without log message' do
41
- hash = nil
42
- exc = nil
43
- begin
44
- raise StandardError, 'Reading File'
45
- rescue Exception => e
46
- exc = e
47
- end
48
- @appender.notifier.stub(:notify!, ->(h) { hash = h }) do
49
- @appender.error exc
50
- end
51
- assert_equal exc.message, hash[:short_message]
52
- assert_equal exc.class.to_s, hash[:exception][:name]
53
- assert_match exc.message, hash[:exception][:message]
54
- assert_equal 3, hash[:level], 'Should be error level (3)'
55
- assert hash[:exception][:stack_trace].first.include?(__FILE__), hash[:exception]
56
- end
57
-
58
- it 'send error notifications to Graylog with severity' do
59
- hash = nil
60
- @appender.notifier.stub(:notify!, ->(h) { hash = h }) do
61
- @appender.error @message
62
- end
63
- assert_equal @message, hash[:short_message]
64
- assert_equal 3, hash[:level]
65
- refute hash[:stack_trace]
66
- end
67
-
68
- it 'send notification to Graylog with custom attributes' do
69
- hash = nil
70
- @appender.notifier.stub(:notify!, ->(h) { hash = h }) do
71
- @appender.error @message, key1: 1, key2: 'a'
72
- end
73
- assert_equal @message, hash[:short_message]
74
- assert_equal 3, hash[:level]
75
- refute hash[:stack_trace]
76
- assert payload = hash[:payload], hash
77
- assert_equal 1, payload[:key1], payload
78
- assert_equal 'a', payload[:key2], payload
79
- end
80
- end
81
- end
82
- end
@@ -1,45 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- # Unit Test for SemanticLogger::Appender::Bugsnag
4
- module Appender
5
- class HoneybadgerTest < Minitest::Test
6
- describe SemanticLogger::Appender::Honeybadger do
7
- before do
8
- @appender = SemanticLogger::Appender::Honeybadger.new(level: :trace)
9
- @message = 'AppenderHoneybadgerTest log message'
10
- SemanticLogger.backtrace_level = :error
11
- end
12
-
13
- SemanticLogger::LEVELS.each do |level|
14
- it "sends #{level} message" do
15
- hash = nil
16
- Honeybadger.stub(:notify, ->(h) { hash = h }) do
17
- @appender.send(level, @message)
18
- end
19
- assert_equal @message, hash[:error_message]
20
- assert_equal 'SemanticLogger::Appender::Honeybadger', hash[:error_class]
21
-
22
- if %i[error fatal].include?(level)
23
- assert hash.key?(:backtrace)
24
- else
25
- refute hash.key?(:backtrace)
26
- end
27
- assert_equal true, hash.key?(:context)
28
- assert_equal level, hash[:context][:level]
29
- end
30
-
31
- it "sends #{level} exceptions" do
32
- error = RuntimeError.new('Oh no, Error.')
33
- exception = hash = nil
34
- Honeybadger.stub(:notify, ->(exc, h) { exception = exc; hash = h }) do
35
- @appender.send(level, @message, error)
36
- end
37
-
38
- assert_equal error.class.to_s, exception.class.to_s
39
- assert_equal error.message, exception.message
40
- assert_equal @message, hash[:message], hash
41
- end
42
- end
43
- end
44
- end
45
- end
@@ -1,63 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- # Unit Test for SemanticLogger::Appender::Http
4
- module Appender
5
- class HttpTest < Minitest::Test
6
- response_mock = Struct.new(:code, :body)
7
-
8
- describe SemanticLogger::Appender::Http do
9
- before do
10
- Net::HTTP.stub_any_instance(:start, true) do
11
- @appender = SemanticLogger::Appender::Http.new(url: 'http://localhost:8088/path')
12
- end
13
- @message = 'AppenderHttpTest log message'
14
- end
15
-
16
- SemanticLogger::LEVELS.each do |level|
17
- it "send #{level}" do
18
- request = nil
19
- @appender.http.stub(:request, ->(r) { request = r; response_mock.new('200', 'ok') }) do
20
- @appender.send(level, @message)
21
- end
22
- hash = JSON.parse(request.body)
23
- assert_equal @message, hash['message']
24
- assert_equal level.to_s, hash['level']
25
- refute hash['stack_trace']
26
- end
27
-
28
- it "send #{level} exceptions" do
29
- exc = nil
30
- begin
31
- Uh oh
32
- rescue Exception => e
33
- exc = e
34
- end
35
- request = nil
36
- @appender.http.stub(:request, ->(r) { request = r; response_mock.new('200', 'ok') }) do
37
- @appender.send(level, 'Reading File', exc)
38
- end
39
- hash = JSON.parse(request.body)
40
- assert 'Reading File', hash['message']
41
- assert 'NameError', hash['exception']['name']
42
- assert 'undefined local variable or method', hash['exception']['message']
43
- assert_equal level.to_s, hash['level'], 'Should be error level (3)'
44
- assert hash['exception']['stack_trace'].first.include?(__FILE__), hash['exception']
45
- end
46
-
47
- it "send #{level} custom attributes" do
48
- request = nil
49
- @appender.http.stub(:request, ->(r) { request = r; response_mock.new('200', 'ok') }) do
50
- @appender.send(level, @message, key1: 1, key2: 'a')
51
- end
52
- hash = JSON.parse(request.body)
53
- assert_equal @message, hash['message']
54
- assert_equal level.to_s, hash['level']
55
- refute hash['stack_trace']
56
- assert payload = hash['payload'], hash
57
- assert_equal 1, payload['key1'], payload
58
- assert_equal 'a', payload['key2'], payload
59
- end
60
- end
61
- end
62
- end
63
- end
@@ -1,35 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- module Appender
4
- class KafkaTest < Minitest::Test
5
- describe SemanticLogger::Appender::Kafka do
6
- before do
7
- @appender = SemanticLogger::Appender::Kafka.new(
8
- seed_brokers: ['localhost:9092']
9
- )
10
- @message = 'AppenderKafkaTest log message'
11
- end
12
-
13
- after do
14
- @appender&.close
15
- end
16
-
17
- it 'sends log messages in JSON format' do
18
- message = nil
19
- options = nil
20
- ::Kafka::Producer.stub_any_instance(:produce, ->(value, **opts) { message = value; options = opts }) do
21
- @appender.info(@message)
22
- @appender.flush
23
- end
24
-
25
- h = JSON.parse(message)
26
- assert_equal 'info', h['level']
27
- assert_equal @message, h['message']
28
- assert_equal 'SemanticLogger::Appender::Kafka', h['name']
29
- assert_equal $$, h['pid']
30
-
31
- assert_equal 'log_messages', options[:topic]
32
- end
33
- end
34
- end
35
- end
@@ -1,104 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- # Unit Test for SemanticLogger::Appender::MongoDB
4
- module Appender
5
- class MongoDBTest < Minitest::Test
6
- describe SemanticLogger::Appender::MongoDB do
7
- before do
8
- @appender = SemanticLogger::Appender::MongoDB.new(
9
- uri: 'mongodb://127.0.0.1:27017/test',
10
- collection_size: 10 * 1024 ** 2, # 10MB
11
- host: 'test',
12
- application: 'test_application',
13
- level: :trace
14
- )
15
- @hash = {tracking_number: 12_345, session_id: 'HSSKLEU@JDK767'}
16
- Thread.current.name = 'thread'
17
- end
18
-
19
- after do
20
- @appender&.purge_all
21
- end
22
-
23
- describe 'format logs into documents' do
24
- it 'handle no arguments' do
25
- @appender.debug
26
- document = @appender.collection.find.first
27
- assert_equal :debug, document['level']
28
- assert_nil document['message']
29
- assert_equal 'thread', document['thread']
30
- assert document['time'].is_a?(Time)
31
- assert_nil document['payload']
32
- assert_equal $$, document['pid']
33
- assert_equal 'test', document['host']
34
- assert_equal 'test_application', document['application']
35
- end
36
-
37
- it 'handle named parameters' do
38
- @appender.debug(payload: @hash)
39
-
40
- document = @appender.collection.find.first
41
- assert_equal :debug, document['level']
42
- assert_nil document['message']
43
- assert_equal 'thread', document['thread']
44
- assert document['time'].is_a?(Time)
45
- assert payload = document['payload']
46
- assert_equal 12_345, payload['tracking_number'], payload
47
- assert_equal 'HSSKLEU@JDK767', payload['session_id']
48
- assert_equal $$, document['pid']
49
- assert_equal 'test', document['host']
50
- assert_equal 'test_application', document['application']
51
- end
52
-
53
- it 'handle message and payload' do
54
- @appender.debug('hello world', @hash)
55
-
56
- document = @appender.collection.find.first
57
- assert_equal :debug, document['level']
58
- assert_equal 'hello world', document['message']
59
- assert_equal 'thread', document['thread']
60
- assert document['time'].is_a?(Time)
61
- assert payload = document['payload']
62
- assert_equal 12_345, payload['tracking_number'], payload
63
- assert_equal 'HSSKLEU@JDK767', payload['session_id']
64
- assert_equal $$, document['pid']
65
- assert_equal 'test', document['host']
66
- assert_equal 'test_application', document['application']
67
- end
68
-
69
- it 'handle message without payload' do
70
- @appender.debug('hello world')
71
-
72
- document = @appender.collection.find.first
73
- assert_equal :debug, document['level']
74
- assert_equal 'hello world', document['message']
75
- assert_equal 'thread', document['thread']
76
- assert document['time'].is_a?(Time)
77
- assert_equal $$, document['pid']
78
- assert_equal 'test', document['host']
79
- assert_equal 'test_application', document['application']
80
- end
81
- end
82
-
83
- # Ensure that any log level can be logged
84
- SemanticLogger::LEVELS.each do |level|
85
- describe "##{level}" do
86
- it 'logs' do
87
- @appender.send(level, 'hello world -- Calculations', @hash)
88
- document = @appender.collection.find.first
89
- assert_equal level, document['level']
90
- assert_equal 'hello world -- Calculations', document['message']
91
- assert_equal 'thread', document['thread']
92
- assert document['time'].is_a?(Time)
93
- assert payload = document['payload']
94
- assert_equal 12_345, payload['tracking_number'], payload
95
- assert_equal 'HSSKLEU@JDK767', payload['session_id']
96
- assert_equal $$, document['pid']
97
- assert_equal 'test', document['host'], document.ai
98
- assert_equal 'test_application', document['application']
99
- end
100
- end
101
- end
102
- end
103
- end
104
- end
@@ -1,80 +0,0 @@
1
- # So that the NewRelic appender will load the mock
2
- $LOAD_PATH.unshift File.dirname(__FILE__)
3
- require_relative '../test_helper'
4
-
5
- # Unit Test for SemanticLogger::Appender::NewRelic
6
- module Appender
7
- class NewRelicTest < Minitest::Test
8
- describe SemanticLogger::Appender::NewRelic do
9
- before do
10
- @appender = SemanticLogger::Appender::NewRelic.new
11
- @message = 'AppenderNewRelicTest log message'
12
- end
13
-
14
- (SemanticLogger::LEVELS - %i[error fatal]).each do |level|
15
- it "does not send :#{level} notifications to New Relic" do
16
- exception = hash = nil
17
- NewRelic::Agent.stub(:notice_error, ->(exc, h) { exception = exc; hash = h }) do
18
- @appender.tagged('test') do
19
- @appender.send(level, "AppenderNewRelicTest #{level} message")
20
- end
21
- end
22
- assert_nil exception
23
- assert_nil hash
24
- end
25
- end
26
-
27
- %i[error fatal].each do |level|
28
- it "sends :#{level} notifications to New Relic" do
29
- exception = hash = nil
30
- NewRelic::Agent.stub(:notice_error, ->(exc, h) { exception = exc; hash = h }) do
31
- @appender.tagged('test') do
32
- @appender.send(level, @message)
33
- end
34
- end
35
- assert_equal 'RuntimeError', exception.class.to_s
36
- assert_equal @message, exception.message
37
- assert_equal ['test'], hash[:custom_params][:tags]
38
- assert_nil hash[:custom_params][:duration]
39
- assert hash[:custom_params][:thread], hash.inspect
40
- end
41
- end
42
-
43
- it 'send notification to New Relic with custom attributes' do
44
- exception = hash = nil
45
- NewRelic::Agent.stub(:notice_error, ->(exc, h) { exception = exc; hash = h }) do
46
- SemanticLogger.tagged('test') do
47
- SemanticLogger.named_tagged(key1: 1, key2: 'a') do
48
- @appender.measure_error(message: @message, payload: {key3: 4}) do
49
- sleep 0.001
50
- end
51
- end
52
- end
53
- end
54
- assert_equal 'RuntimeError', exception.class.to_s
55
- assert_equal @message, exception.message
56
- assert params = hash[:custom_params], hash
57
- assert params[:duration], params
58
- assert params[:thread], params
59
-
60
- assert_equal ['test'], params[:tags], params
61
-
62
- assert named_tags = params[:named_tags], params
63
- assert_equal 1, named_tags[:key1], named_tags
64
- assert_equal 'a', named_tags[:key2], named_tags
65
-
66
- assert payload = params[:payload], params
67
- assert_equal 4, payload[:key3], payload
68
- end
69
-
70
- it 'does not send metric only notifications' do
71
- exception = hash = nil
72
- NewRelic::Agent.stub(:notice_error, ->(exc, h) { exception = exc; hash = h }) do
73
- @appender.debug metric: 'my/custom/metric', payload: {hello: :world}
74
- end
75
- assert_nil exception
76
- assert_nil hash
77
- end
78
- end
79
- end
80
- end
@@ -1,14 +0,0 @@
1
- # Mocked NewRelic::Agent used for testing
2
-
3
- module NewRelic
4
- module Agent
5
- def self.notice_error(message, hash)
6
- end
7
-
8
- def self.record_metric(name, secoonds)
9
- end
10
-
11
- def self.increment_metric(name, count = 1)
12
- end
13
- end
14
- end
@@ -1,47 +0,0 @@
1
- require_relative '../test_helper'
2
-
3
- # Unit Test for SemanticLogger::Appender::Sentry
4
- module Appender
5
- class SentryTest < Minitest::Test
6
- describe SemanticLogger::Appender::Sentry do
7
- before do
8
- @appender = SemanticLogger::Appender::Sentry.new(level: :trace)
9
- @message = 'AppenderRavenTest log message'
10
- SemanticLogger.backtrace_level = :error
11
- end
12
-
13
- SemanticLogger::LEVELS.each do |level|
14
- it "sends #{level} message" do
15
- error_message = hash = nil
16
- Raven.stub(:capture_message, ->(msg, h) { error_message = msg; hash = h }) do
17
- @appender.send(level, @message)
18
- end
19
- assert_equal @message, error_message
20
- assert_equal 'SemanticLogger::Appender::Sentry', hash[:extra][:name]
21
-
22
- if %i[error fatal].include?(level)
23
- assert hash[:extra].key?(:backtrace)
24
- else
25
- refute hash[:extra].key?(:backtrace)
26
- end
27
- assert_equal true, hash.key?(:extra)
28
- assert_equal level, hash[:level]
29
- end
30
-
31
- it "sends #{level} exceptions" do
32
- error = RuntimeError.new('Oh no, Error.')
33
- exception = hash = nil
34
- Raven.stub(:capture_exception, ->(exc, h) { exception = exc; hash = h }) do
35
- @appender.send(level, @message, error)
36
- end
37
-
38
- assert_equal error.class.to_s, exception.class.to_s
39
- assert_equal error.message, exception.message
40
- assert_equal true, hash.key?(:extra)
41
- assert_equal @message, hash[:extra][:message], hash
42
- assert_equal level, hash[:level]
43
- end
44
- end
45
- end
46
- end
47
- end