semantic_logger 3.4.1 → 4.0.0.beta1

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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -0
  3. data/Rakefile +4 -8
  4. data/lib/semantic_logger.rb +2 -31
  5. data/lib/semantic_logger/appender.rb +76 -0
  6. data/lib/semantic_logger/appender/bugsnag.rb +3 -8
  7. data/lib/semantic_logger/appender/file.rb +1 -1
  8. data/lib/semantic_logger/appender/honeybadger.rb +1 -1
  9. data/lib/semantic_logger/appender/http.rb +1 -1
  10. data/lib/semantic_logger/appender/mongodb.rb +30 -28
  11. data/lib/semantic_logger/appender/sentry.rb +2 -2
  12. data/lib/semantic_logger/appender/splunk_http.rb +4 -4
  13. data/lib/semantic_logger/appender/syslog.rb +2 -2
  14. data/lib/semantic_logger/appender/tcp.rb +9 -5
  15. data/lib/semantic_logger/appender/udp.rb +1 -0
  16. data/lib/semantic_logger/base.rb +73 -140
  17. data/lib/semantic_logger/core_ext/thread.rb +4 -1
  18. data/lib/semantic_logger/formatters/color.rb +7 -0
  19. data/lib/semantic_logger/formatters/default.rb +7 -0
  20. data/lib/semantic_logger/formatters/syslog.rb +1 -1
  21. data/lib/semantic_logger/log.rb +115 -12
  22. data/lib/semantic_logger/logger.rb +6 -215
  23. data/lib/semantic_logger/metrics/new_relic.rb +1 -1
  24. data/lib/semantic_logger/metrics/statsd.rb +5 -1
  25. data/lib/semantic_logger/metrics/udp.rb +80 -0
  26. data/lib/semantic_logger/processor.rb +235 -0
  27. data/lib/semantic_logger/semantic_logger.rb +36 -65
  28. data/lib/semantic_logger/subscriber.rb +2 -2
  29. data/lib/semantic_logger/version.rb +1 -1
  30. data/test/appender/bugsnag_test.rb +10 -9
  31. data/test/appender/elasticsearch_test.rb +3 -2
  32. data/test/appender/graylog_test.rb +4 -3
  33. data/test/appender/honeybadger_test.rb +2 -2
  34. data/test/appender/http_test.rb +3 -2
  35. data/test/appender/mongodb_test.rb +24 -23
  36. data/test/appender/new_relic_test.rb +15 -8
  37. data/test/appender/sentry_test.rb +2 -2
  38. data/test/appender/splunk_http_test.rb +8 -7
  39. data/test/appender/splunk_test.rb +6 -5
  40. data/test/appender/tcp_test.rb +3 -4
  41. data/test/appender/udp_test.rb +4 -5
  42. data/test/appender/wrapper_test.rb +37 -38
  43. data/test/concerns/compatibility_test.rb +2 -2
  44. data/test/loggable_test.rb +1 -1
  45. data/test/logger_test.rb +149 -528
  46. data/test/measure_test.rb +249 -0
  47. data/test/semantic_logger_test.rb +257 -0
  48. metadata +24 -16
@@ -99,10 +99,10 @@ module SemanticLogger
99
99
  def extract_formatter(formatter, &block)
100
100
  case
101
101
  when formatter.is_a?(Symbol)
102
- SemanticLogger.constantize_symbol(formatter, 'SemanticLogger::Formatters').new
102
+ SemanticLogger::Appender.constantize_symbol(formatter, 'SemanticLogger::Formatters').new
103
103
  when formatter.is_a?(Hash) && formatter.size > 0
104
104
  fmt, options = formatter.first
105
- SemanticLogger.constantize_symbol(fmt.to_sym, 'SemanticLogger::Formatters').new(options)
105
+ SemanticLogger::Appender.constantize_symbol(fmt.to_sym, 'SemanticLogger::Formatters').new(options)
106
106
  when formatter.respond_to?(:call)
107
107
  formatter
108
108
  when block
@@ -1,3 +1,3 @@
1
1
  module SemanticLogger #:nodoc
2
- VERSION = '3.4.1'
2
+ VERSION = '4.0.0.beta1'
3
3
  end
@@ -5,7 +5,7 @@ module Appender
5
5
  class BugsnagTest < Minitest::Test
6
6
  describe SemanticLogger::Appender::Bugsnag do
7
7
  before do
8
- @appender = SemanticLogger::Appender::Bugsnag.new(:info)
8
+ @appender = SemanticLogger::Appender::Bugsnag.new(level: :info)
9
9
  @message = 'AppenderBugsnagTest log message'
10
10
  end
11
11
 
@@ -25,8 +25,8 @@ module Appender
25
25
  @appender.send(level, @message)
26
26
  end
27
27
  if [:trace, :debug].include?(level)
28
- assert_equal nil, exception
29
- assert_equal nil, hash
28
+ assert_nil exception
29
+ assert_nil hash
30
30
  else
31
31
  assert_equal 'RuntimeError', exception.class.to_s
32
32
  assert_equal @message, exception.message
@@ -40,13 +40,14 @@ module Appender
40
40
  @appender.send(level, @message, {key1: 1, key2: 'a'})
41
41
  end
42
42
  if [:trace, :debug].include?(level)
43
- assert_equal nil, exception
44
- assert_equal nil, hash
43
+ assert_nil exception
44
+ assert_nil hash
45
45
  else
46
46
  assert_equal 'RuntimeError', exception.class.to_s
47
47
  assert_equal @message, exception.message
48
- assert_equal 1, hash[:key1], hash
49
- assert_equal 'a', hash[:key2], hash
48
+ assert payload = hash[:payload], hash
49
+ assert_equal 1, payload[:key1], payload
50
+ assert_equal 'a', payload[:key2], payload
50
51
  end
51
52
  end
52
53
 
@@ -57,8 +58,8 @@ module Appender
57
58
  @appender.send(level, @message, error)
58
59
  end
59
60
  if [:trace, :debug].include?(level)
60
- assert_equal nil, exception
61
- assert_equal nil, hash
61
+ assert_nil exception
62
+ assert_nil hash
62
63
  else
63
64
  assert_equal error.class.to_s, exception.class.to_s
64
65
  assert_equal error.message, exception.message
@@ -64,8 +64,9 @@ module Appender
64
64
  assert_equal @message, message['message']
65
65
  assert_equal level.to_s, message['level']
66
66
  refute message['stack_trace']
67
- assert_equal(1, message['key1'], message)
68
- assert_equal('a', message['key2'], message)
67
+ assert payload = message['payload'], message
68
+ assert_equal 1, payload['key1'], message
69
+ assert_equal 'a', payload['key2'], message
69
70
  end
70
71
  end
71
72
 
@@ -21,7 +21,7 @@ module Appender
21
21
 
22
22
  it 'send exception notifications to Graylog with severity' do
23
23
  hash = nil
24
- exc = nil
24
+ exc = nil
25
25
  begin
26
26
  Uh oh
27
27
  rescue Exception => e
@@ -55,8 +55,9 @@ module Appender
55
55
  assert_equal @message, hash[:short_message]
56
56
  assert_equal 3, hash[:level]
57
57
  refute hash[:stack_trace]
58
- assert_equal(1, hash[:key1], hash)
59
- assert_equal('a', hash[:key2], hash)
58
+ assert payload = hash[:payload], hash
59
+ assert_equal 1, payload[:key1], payload
60
+ assert_equal 'a', payload[:key2], payload
60
61
  end
61
62
  end
62
63
  end
@@ -5,8 +5,8 @@ module Appender
5
5
  class HoneybadgerTest < Minitest::Test
6
6
  describe SemanticLogger::Appender::Honeybadger do
7
7
  before do
8
- @appender = SemanticLogger::Appender::Honeybadger.new(:trace)
9
- @message = 'AppenderHoneybadgerTest log message'
8
+ @appender = SemanticLogger::Appender::Honeybadger.new(:trace)
9
+ @message = 'AppenderHoneybadgerTest log message'
10
10
  SemanticLogger.backtrace_level = :error
11
11
  end
12
12
 
@@ -53,8 +53,9 @@ module Appender
53
53
  assert_equal @message, hash['message']
54
54
  assert_equal level.to_s, hash['level']
55
55
  refute hash['stack_trace']
56
- assert_equal 1, hash['key1'], hash
57
- assert_equal 'a', hash['key2'], hash
56
+ assert payload = hash['payload'], hash
57
+ assert_equal 1, payload['key1'], payload
58
+ assert_equal 'a', payload['key2'], payload
58
59
  end
59
60
 
60
61
  end
@@ -1,14 +1,12 @@
1
1
  require_relative '../test_helper'
2
2
 
3
3
  # Unit Test for SemanticLogger::Appender::MongoDB
4
- #
5
4
  module Appender
6
5
  class MongoDBTest < Minitest::Test
7
6
  describe SemanticLogger::Appender::MongoDB do
8
7
  before do
9
- @db = Mongo::Connection.new['test']
10
8
  @appender = SemanticLogger::Appender::MongoDB.new(
11
- db: @db,
9
+ uri: 'mongodb://127.0.0.1:27017/test',
12
10
  collection_size: 10*1024**2, # 10MB
13
11
  host: 'test',
14
12
  application: 'test_application',
@@ -25,27 +23,28 @@ module Appender
25
23
  describe 'format logs into documents' do
26
24
  it 'handle no arguments' do
27
25
  @appender.debug
28
- document = @appender.collection.find_one
26
+ document = @appender.collection.find.first
29
27
  assert_equal :debug, document['level']
30
- assert_equal nil, document['message']
28
+ assert_nil document['message']
31
29
  assert_equal 'thread', document['thread']
32
30
  assert document['time'].is_a?(Time)
33
- assert_equal nil, document['payload']
31
+ assert_nil document['payload']
34
32
  assert_equal $$, document['pid']
35
33
  assert_equal 'test', document['host']
36
34
  assert_equal 'test_application', document['application']
37
35
  end
38
36
 
39
- it 'handle hash message' do
40
- @appender.debug(@hash)
37
+ it 'handle named parameters' do
38
+ @appender.debug(payload: @hash)
41
39
 
42
- document = @appender.collection.find_one
40
+ document = @appender.collection.find.first
43
41
  assert_equal :debug, document['level']
44
- assert_equal nil, document['message']
42
+ assert_nil document['message']
45
43
  assert_equal 'thread', document['thread']
46
44
  assert document['time'].is_a?(Time)
47
- assert_equal 12345, document['tracking_number']
48
- assert_equal 'HSSKLEU@JDK767', document['session_id']
45
+ assert payload = document['payload']
46
+ assert_equal 12345, payload['tracking_number'], payload
47
+ assert_equal 'HSSKLEU@JDK767', payload['session_id']
49
48
  assert_equal $$, document['pid']
50
49
  assert_equal 'test', document['host']
51
50
  assert_equal 'test_application', document['application']
@@ -54,13 +53,14 @@ module Appender
54
53
  it 'handle message and payload' do
55
54
  @appender.debug('hello world', @hash)
56
55
 
57
- document = @appender.collection.find_one
56
+ document = @appender.collection.find.first
58
57
  assert_equal :debug, document['level']
59
58
  assert_equal 'hello world', document['message']
60
59
  assert_equal 'thread', document['thread']
61
60
  assert document['time'].is_a?(Time)
62
- assert_equal 12345, document['tracking_number']
63
- assert_equal 'HSSKLEU@JDK767', document['session_id']
61
+ assert payload = document['payload']
62
+ assert_equal 12345, payload['tracking_number'], payload
63
+ assert_equal 'HSSKLEU@JDK767', payload['session_id']
64
64
  assert_equal $$, document['pid']
65
65
  assert_equal 'test', document['host']
66
66
  assert_equal 'test_application', document['application']
@@ -69,7 +69,7 @@ module Appender
69
69
  it 'handle message without payload' do
70
70
  @appender.debug('hello world')
71
71
 
72
- document = @appender.collection.find_one
72
+ document = @appender.collection.find.first
73
73
  assert_equal :debug, document['level']
74
74
  assert_equal 'hello world', document['message']
75
75
  assert_equal 'thread', document['thread']
@@ -80,18 +80,19 @@ module Appender
80
80
  end
81
81
  end
82
82
 
83
- describe 'for each log level' do
84
- # Ensure that any log level can be logged
85
- SemanticLogger::LEVELS.each do |level|
86
- it 'log #{level} information' do
83
+ # Ensure that any log level can be logged
84
+ SemanticLogger::LEVELS.each do |level|
85
+ describe "##{level}" do
86
+ it 'logs' do
87
87
  @appender.send(level, 'hello world -- Calculations', @hash)
88
- document = @appender.collection.find_one
88
+ document = @appender.collection.find.first
89
89
  assert_equal level, document['level']
90
90
  assert_equal 'hello world -- Calculations', document['message']
91
91
  assert_equal 'thread', document['thread']
92
92
  assert document['time'].is_a?(Time)
93
- assert_equal 12345, document['tracking_number']
94
- assert_equal 'HSSKLEU@JDK767', document['session_id']
93
+ assert payload = document['payload']
94
+ assert_equal 12345, payload['tracking_number'], payload
95
+ assert_equal 'HSSKLEU@JDK767', payload['session_id']
95
96
  assert_equal $$, document['pid']
96
97
  assert_equal 'test', document['host'], document.ai
97
98
  assert_equal 'test_application', document['application']
@@ -44,9 +44,9 @@ module Appender
44
44
  it 'send notification to New Relic with custom attributes' do
45
45
  exception = hash = nil
46
46
  NewRelic::Agent.stub(:notice_error, -> exc, h { exception = exc; hash = h }) do
47
- @appender.tagged('test') do
48
- @appender.with_payload({key1: 1, key2: 'a'}) do
49
- @appender.measure(:error, @message) do
47
+ SemanticLogger.tagged('test') do
48
+ SemanticLogger.named_tagged(key1: 1, key2: 'a') do
49
+ @appender.measure_error(message: @message, payload: {key3: 4}) do
50
50
  sleep 0.001
51
51
  end
52
52
  end
@@ -54,11 +54,18 @@ module Appender
54
54
  end
55
55
  assert_equal 'RuntimeError', exception.class.to_s
56
56
  assert_equal @message, exception.message
57
- assert_equal ['test'], hash[:custom_params][:tags], hash
58
- assert_equal 1, hash[:custom_params][:key1], hash
59
- assert_equal 'a', hash[:custom_params][:key2], hash
60
- assert hash[:custom_params][:duration], hash
61
- assert hash[:custom_params][:thread], hash
57
+ assert params = hash[:custom_params], hash
58
+ assert params[:duration], params
59
+ assert params[:thread], params
60
+
61
+ assert_equal ['test'], params[:tags], params
62
+
63
+ assert named_tags = params[:named_tags], params
64
+ assert_equal 1, named_tags[:key1], named_tags
65
+ assert_equal 'a', named_tags[:key2], named_tags
66
+
67
+ assert payload = params[:payload], params
68
+ assert_equal 4, payload[:key3], payload
62
69
  end
63
70
  end
64
71
  end
@@ -5,8 +5,8 @@ module Appender
5
5
  class SentryTest < Minitest::Test
6
6
  describe SemanticLogger::Appender::Sentry do
7
7
  before do
8
- @appender = SemanticLogger::Appender::Sentry.new(:trace)
9
- @message = 'AppenderRavenTest log message'
8
+ @appender = SemanticLogger::Appender::Sentry.new(:trace)
9
+ @message = 'AppenderRavenTest log message'
10
10
  SemanticLogger.backtrace_level = :error
11
11
  end
12
12
 
@@ -13,7 +13,7 @@ module Appender
13
13
  token: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
14
14
  )
15
15
  end
16
- @message = 'AppenderSplunkHttpTest log message'
16
+ @message = 'AppenderSplunkHttpTest log message'
17
17
  end
18
18
 
19
19
  SemanticLogger::LEVELS.each do |level|
@@ -57,12 +57,13 @@ module Appender
57
57
  end
58
58
  body = decompress_data(request.body)
59
59
  message = JSON.parse(body)
60
- assert message['event'], message.ai
61
- assert_equal @message, message['event']['message']
62
- assert_equal level.to_s, message['event']['level']
63
- refute message['event']['stack_trace']
64
- assert_equal(1, message['event']['key1'], message)
65
- assert_equal('a', message['event']['key2'], message)
60
+ assert event = message['event'], message.ai
61
+ assert_equal @message, event['message']
62
+ assert_equal level.to_s, event['level']
63
+ refute event['stack_trace']
64
+ assert payload = event['payload'], event
65
+ assert_equal(1, payload['key1'], message)
66
+ assert_equal('a', payload['key2'], message)
66
67
  end
67
68
  end
68
69
 
@@ -61,11 +61,12 @@ module Appender
61
61
  end
62
62
  assert_equal @message, mock.message
63
63
 
64
- assert mock.event[:event], mock.event.ai
65
- assert_equal level, mock.event[:event][:level]
66
- refute mock.event[:event][:stack_trace]
67
- assert_equal(1, mock.event[:event][:key1], mock.event)
68
- assert_equal('a', mock.event[:event][:key2], mock.event)
64
+ assert event = mock.event[:event], mock.event.ai
65
+ assert_equal level, event[:level]
66
+ refute event[:stack_trace]
67
+ assert payload = event[:payload]
68
+ assert_equal(1, payload[:key1], payload)
69
+ assert_equal('a', payload[:key2], payload)
69
70
  end
70
71
  end
71
72
 
@@ -3,8 +3,6 @@ require_relative '../test_helper'
3
3
  # Unit Test for SemanticLogger::Appender::Tcp
4
4
  module Appender
5
5
  class TcpTest < Minitest::Test
6
- response_mock = Struct.new(:code, :body)
7
-
8
6
  describe SemanticLogger::Appender::Tcp do
9
7
  before do
10
8
  Net::TCPClient.stub_any_instance(:connect, true) do
@@ -58,8 +56,9 @@ module Appender
58
56
  assert_equal @message, hash['message']
59
57
  assert_equal level.to_s, hash['level']
60
58
  refute hash['stack_trace']
61
- assert_equal 1, hash['key1'], hash
62
- assert_equal 'a', hash['key2'], hash
59
+ assert payload = hash['payload'], hash
60
+ assert_equal 1, payload['key1'], payload
61
+ assert_equal 'a', payload['key2'], payload
63
62
  end
64
63
 
65
64
  end
@@ -3,12 +3,10 @@ require_relative '../test_helper'
3
3
  # Unit Test for SemanticLogger::Appender::Tcp
4
4
  module Appender
5
5
  class UdpTest < Minitest::Test
6
- response_mock = Struct.new(:code, :body)
7
-
8
6
  describe SemanticLogger::Appender::Udp do
9
7
  before do
10
8
  @appender = SemanticLogger::Appender::Udp.new(server: 'localhost:8088')
11
- @message = 'AppenderUdpTest log message'
9
+ @message = 'AppenderUdpTest log message'
12
10
  end
13
11
 
14
12
  SemanticLogger::LEVELS.each do |level|
@@ -51,8 +49,9 @@ module Appender
51
49
  assert_equal @message, hash['message']
52
50
  assert_equal level.to_s, hash['level']
53
51
  refute hash['stack_trace']
54
- assert_equal 1, hash['key1'], hash
55
- assert_equal 'a', hash['key2'], hash
52
+ assert payload = hash['payload'], hash
53
+ assert_equal 1, payload['key1'], payload
54
+ assert_equal 'a', payload['key2'], payload
56
55
  end
57
56
 
58
57
  end
@@ -6,59 +6,58 @@ module Appender
6
6
  class WrapperTest < Minitest::Test
7
7
  describe SemanticLogger::Appender::Wrapper do
8
8
  before do
9
- @time = Time.new
10
- @mock_logger = MockLogger.new
11
- @appender = SemanticLogger::Appender::Wrapper.new(@mock_logger)
12
- @hash = {session_id: 'HSSKLEU@JDK767', tracking_number: 12345}
13
- @hash_str = @hash.inspect.sub("{", "\\{").sub("}", "\\}")
9
+ SemanticLogger.default_level = :trace
10
+ SemanticLogger.backtrace_level = :trace
11
+
12
+ @time = Time.new
13
+ @mock_logger = MockLogger.new
14
+ @appender = SemanticLogger::Appender::Wrapper.new(@mock_logger)
15
+ @hash = {session_id: 'HSSKLEU@JDK767', tracking_number: 12345}
16
+ @hash_str = @hash.inspect.sub("{", "\\{").sub("}", "\\}")
17
+ @thread_name = Thread.current.name
18
+ @file_name_reg_exp = ' wrapper_test.rb:\d+'
14
19
  end
15
20
 
16
21
  describe 'format logs into text form' do
17
- it 'handle nil name, message and payload' do
18
- log = SemanticLogger::Log.new
19
- log.time = Time.now
20
- log.level = :debug
21
- @appender.log(log)
22
- assert_match(/\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:\] /, @mock_logger.message)
22
+ it 'logs blank data' do
23
+ @appender.debug
24
+ assert_match(/\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:#{@thread_name}#{@file_name_reg_exp}\] SemanticLogger::Appender::Wrapper/, @mock_logger.message)
23
25
  end
24
26
 
25
- it 'handle nil message and payload' do
26
- log = SemanticLogger::Log.new
27
- log.time = Time.now
28
- log.level = :debug
29
- log.name = 'class'
30
- @appender.log(log)
31
- assert_match(/\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:\] class/, @mock_logger.message)
27
+ it 'logs message' do
28
+ @appender.debug('hello world')
29
+ assert_match(/\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:#{@thread_name}#{@file_name_reg_exp}\] SemanticLogger::Appender::Wrapper -- hello world/, @mock_logger.message)
32
30
  end
33
31
 
34
- it 'handle nil payload' do
35
- log = SemanticLogger::Log.new
36
- log.time = Time.now
37
- log.level = :debug
38
- log.name = 'class'
39
- log.message = 'hello world'
40
- @appender.log(log)
41
- assert_match(/\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:\] class -- hello world/, @mock_logger.message)
32
+ it 'logs message and payload' do
33
+ @appender.debug('hello world', @hash)
34
+ assert_match(/\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:#{@thread_name}#{@file_name_reg_exp}\] SemanticLogger::Appender::Wrapper -- hello world -- #{@hash_str}/, @mock_logger.message)
42
35
  end
43
36
 
44
- it 'handle payload' do
45
- log = SemanticLogger::Log.new
46
- log.time = Time.now
47
- log.level = :debug
48
- log.name = 'class'
49
- log.message = 'hello world'
50
- log.payload = @hash
51
- @appender.log(log)
52
- assert_match(/\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:\] class -- hello world -- #{@hash_str}/, @mock_logger.message)
37
+ it 'logs named parameters' do
38
+ @appender.debug(message: 'hello world', payload: @hash)
39
+ assert_match(/\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:#{@thread_name}#{@file_name_reg_exp}\] SemanticLogger::Appender::Wrapper -- hello world -- #{@hash_str}/, @mock_logger.message)
53
40
  end
54
41
  end
55
42
 
56
43
  describe 'for each log level' do
44
+ before do
45
+ @appender = SemanticLogger.add_appender(logger: @mock_logger)
46
+ @logger = SemanticLogger[WrapperTest]
47
+ end
48
+
49
+ after do
50
+ SemanticLogger.remove_appender(@appender)
51
+ end
52
+
57
53
  # Ensure that any log level can be logged
58
54
  Logger::Severity.constants.each do |level|
59
- it "log #{level.downcase.to_sym} info" do
60
- @appender.log SemanticLogger::Log.new(level.downcase.to_sym, 'thread', 'class', 'hello world', @hash, Time.now)
61
- assert_match(/\d+-\d+-\d+ \d+:\d+:\d+.\d+ \w \[\d+:thread\] class -- hello world -- #{@hash_str}/, @mock_logger.message)
55
+ it "log #{level.downcase.to_sym}" do
56
+ level_char = level[0].upcase
57
+ level_char = 'E' if level_char == 'U'
58
+ @logger.send(level.downcase.to_sym, 'hello world', @hash)
59
+ SemanticLogger.flush
60
+ assert_match(/\d+-\d+-\d+ \d+:\d+:\d+.\d+ #{level_char} \[\d+:#{@thread_name}#{@file_name_reg_exp}\] Appender::WrapperTest -- hello world -- #{@hash_str}/, @mock_logger.message)
62
61
  end
63
62
  end
64
63
  end