semantic_logger 2.16.0 → 2.17.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/README.md +15 -1
- data/lib/semantic_logger/appender/base.rb +22 -6
- data/lib/semantic_logger/appender/bugsnag.rb +22 -9
- data/lib/semantic_logger/appender/mongodb.rb +17 -5
- data/lib/semantic_logger/appender/new_relic.rb +12 -14
- data/lib/semantic_logger/base.rb +38 -6
- data/lib/semantic_logger/semantic_logger.rb +31 -2
- data/lib/semantic_logger/version.rb +1 -1
- data/test/appender/bugsnag_test.rb +65 -0
- data/test/appender/file_test.rb +79 -0
- data/test/appender/mongodb_test.rb +105 -0
- data/test/appender/new_relic_test.rb +64 -0
- data/test/{newrelic_rpm.rb → appender/newrelic_rpm.rb} +0 -0
- data/test/appender/splunk_test.rb +50 -0
- data/test/appender/syslog_test.rb +63 -0
- data/test/{appender_wrapper_test.rb → appender/wrapper_test.rb} +10 -8
- data/test/loggable_test.rb +21 -11
- data/test/logger_test.rb +97 -69
- data/test/test_helper.rb +2 -1
- metadata +18 -18
- data/test/appender_bugsnag_test.rb +0 -60
- data/test/appender_file_test.rb +0 -77
- data/test/appender_mongodb_test.rb +0 -103
- data/test/appender_new_relic_test.rb +0 -83
- data/test/appender_splunk_test.rb +0 -47
- data/test/appender_syslog_test.rb +0 -61
@@ -0,0 +1,79 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'stringio'
|
3
|
+
|
4
|
+
# Unit Test for SemanticLogger::Appender::File
|
5
|
+
#
|
6
|
+
module Appender
|
7
|
+
class FileTest < Minitest::Test
|
8
|
+
describe SemanticLogger::Appender::File do
|
9
|
+
before do
|
10
|
+
SemanticLogger.default_level = :trace
|
11
|
+
@time = Time.new
|
12
|
+
@io = StringIO.new
|
13
|
+
@appender = SemanticLogger::Appender::File.new(@io)
|
14
|
+
@hash = {session_id: 'HSSKLEU@JDK767', tracking_number: 12345}
|
15
|
+
@hash_str = @hash.inspect.sub("{", "\\{").sub("}", "\\}")
|
16
|
+
@thread_name = Thread.current.name
|
17
|
+
end
|
18
|
+
|
19
|
+
describe 'format logs into text form' do
|
20
|
+
it 'handle no message or payload' do
|
21
|
+
@appender.debug
|
22
|
+
assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:#{@thread_name}\] SemanticLogger::Appender::File -- \n/, @io.string
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'handle message' do
|
26
|
+
@appender.debug 'hello world'
|
27
|
+
assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:#{@thread_name}\] SemanticLogger::Appender::File -- hello world\n/, @io.string
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'handle message and payload' do
|
31
|
+
@appender.debug 'hello world', @hash
|
32
|
+
assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:#{@thread_name}\] SemanticLogger::Appender::File -- hello world -- #{@hash_str}\n/, @io.string
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'handle message, payload, and exception' do
|
36
|
+
@appender.debug 'hello world', @hash, StandardError.new('StandardError')
|
37
|
+
assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:#{@thread_name}\] SemanticLogger::Appender::File -- hello world -- #{@hash_str} -- Exception: StandardError: StandardError\n\n/, @io.string
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'handle exception only' do
|
41
|
+
@appender.debug StandardError.new('StandardError')
|
42
|
+
assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:#{@thread_name}\] SemanticLogger::Appender::File -- #<StandardError: StandardError> -- Exception: StandardError: StandardError\n\n/, @io.string
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
describe 'for each log level' do
|
47
|
+
# Ensure that any log level can be logged
|
48
|
+
SemanticLogger::LEVELS.each do |level|
|
49
|
+
it "log #{level} information" do
|
50
|
+
@appender.send(level, 'hello world', @hash)
|
51
|
+
assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ \w \[\d+:#{@thread_name}\] SemanticLogger::Appender::File -- hello world -- #{@hash_str}\n/, @io.string
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe 'custom formatter' do
|
57
|
+
before do
|
58
|
+
@appender = SemanticLogger::Appender::File.new(@io) do |log|
|
59
|
+
tags = log.tags.collect { |tag| "[#{tag}]" }.join(' ') + ' ' if log.tags && (log.tags.size > 0)
|
60
|
+
|
61
|
+
message = log.message.to_s
|
62
|
+
message << ' -- ' << log.payload.inspect if log.payload
|
63
|
+
message << ' -- ' << "#{log.exception.class}: #{log.exception.message}\n#{(log.exception.backtrace || []).join("\n")}" if log.exception
|
64
|
+
|
65
|
+
duration_str = log.duration ? " (#{'%.1f' % log.duration}ms)" : ''
|
66
|
+
|
67
|
+
"#{SemanticLogger::Appender::Base.formatted_time(log.time)} #{log.level.to_s.upcase} [#{$$}:#{log.thread_name}] #{tags}#{log.name} -- #{message}#{duration_str}"
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'format using formatter' do
|
72
|
+
@appender.debug
|
73
|
+
assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ DEBUG \[\d+:#{@thread_name}\] SemanticLogger::Appender::File -- \n/, @io.string
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,105 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
|
3
|
+
# Unit Test for SemanticLogger::Appender::MongoDB
|
4
|
+
#
|
5
|
+
module Appender
|
6
|
+
class MongoDBTest < Minitest::Test
|
7
|
+
describe SemanticLogger::Appender::MongoDB do
|
8
|
+
before do
|
9
|
+
@db = Mongo::Connection.new['test']
|
10
|
+
@appender = SemanticLogger::Appender::MongoDB.new(
|
11
|
+
db: @db,
|
12
|
+
collection_size: 10*1024**2, # 10MB
|
13
|
+
host_name: 'test',
|
14
|
+
application: 'test_application',
|
15
|
+
level: :trace
|
16
|
+
)
|
17
|
+
@hash = {tracking_number: 12345, session_id: 'HSSKLEU@JDK767'}
|
18
|
+
Thread.current.name = 'thread'
|
19
|
+
end
|
20
|
+
|
21
|
+
after do
|
22
|
+
@appender.purge_all if @appender
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "format logs into documents" do
|
26
|
+
|
27
|
+
it "handle nil name, message and hash" do
|
28
|
+
@appender.debug
|
29
|
+
document = @appender.collection.find_one
|
30
|
+
assert_equal :debug, document['level']
|
31
|
+
assert_equal nil, document['message']
|
32
|
+
assert_equal 'thread', document['thread_name']
|
33
|
+
assert document['time'].is_a?(Time)
|
34
|
+
assert_equal nil, document['payload']
|
35
|
+
assert_equal $$, document['pid']
|
36
|
+
assert_equal 'test', document['host_name']
|
37
|
+
assert_equal 'test_application', document['application']
|
38
|
+
end
|
39
|
+
|
40
|
+
it "handle nil message and payload" do
|
41
|
+
@appender.debug(@hash)
|
42
|
+
|
43
|
+
document = @appender.collection.find_one
|
44
|
+
assert_equal :debug, document['level']
|
45
|
+
assert_equal @hash.inspect, document['message']
|
46
|
+
assert_equal 'thread', document['thread_name']
|
47
|
+
assert document['time'].is_a?(Time)
|
48
|
+
assert_nil document['payload']
|
49
|
+
assert_equal $$, document['pid']
|
50
|
+
assert_equal 'test', document['host_name']
|
51
|
+
assert_equal 'test_application', document['application']
|
52
|
+
end
|
53
|
+
|
54
|
+
it "handle message and payload" do
|
55
|
+
@appender.debug('hello world', @hash)
|
56
|
+
|
57
|
+
document = @appender.collection.find_one
|
58
|
+
assert_equal :debug, document['level']
|
59
|
+
assert_equal 'hello world', document['message']
|
60
|
+
assert_equal 'thread', document['thread_name']
|
61
|
+
assert document['time'].is_a?(Time)
|
62
|
+
assert_equal({"tracking_number" => 12345, "session_id" => 'HSSKLEU@JDK767'}, document['payload'])
|
63
|
+
assert_equal $$, document['pid']
|
64
|
+
assert_equal 'test', document['host_name']
|
65
|
+
assert_equal 'test_application', document['application']
|
66
|
+
end
|
67
|
+
|
68
|
+
it "handle message without payload" do
|
69
|
+
log = SemanticLogger::Base::Log.new(:debug)
|
70
|
+
@appender.debug('hello world')
|
71
|
+
|
72
|
+
document = @appender.collection.find_one
|
73
|
+
assert_equal :debug, document['level']
|
74
|
+
assert_equal 'hello world', document['message']
|
75
|
+
assert_equal 'thread', document['thread_name']
|
76
|
+
assert document['time'].is_a?(Time)
|
77
|
+
assert_equal nil, document['payload']
|
78
|
+
assert_equal $$, document['pid']
|
79
|
+
assert_equal 'test', document['host_name']
|
80
|
+
assert_equal 'test_application', document['application']
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
describe "for each log level" do
|
85
|
+
# Ensure that any log level can be logged
|
86
|
+
SemanticLogger::LEVELS.each do |level|
|
87
|
+
it "log #{level} information" do
|
88
|
+
@appender.send(level, 'hello world -- Calculations', @hash)
|
89
|
+
document = @appender.collection.find_one
|
90
|
+
assert_equal level, document['level']
|
91
|
+
assert_equal 'hello world -- Calculations', document['message']
|
92
|
+
assert_equal 'thread', document['thread_name']
|
93
|
+
assert document['time'].is_a?(Time)
|
94
|
+
assert_equal({"tracking_number" => 12345, "session_id" => 'HSSKLEU@JDK767'}, document['payload'])
|
95
|
+
assert_equal $$, document['pid']
|
96
|
+
assert_equal 'test', document['host_name']
|
97
|
+
assert_equal 'test_application', document['application']
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,64 @@
|
|
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
|
+
|
10
|
+
before do
|
11
|
+
@appender = SemanticLogger::Appender::NewRelic.new(:error)
|
12
|
+
@message = 'AppenderNewRelicTest log message'
|
13
|
+
end
|
14
|
+
|
15
|
+
(SemanticLogger::LEVELS - [:error, :fatal]).each do |level|
|
16
|
+
it "does not send :#{level.to_s} notifications to New Relic" do
|
17
|
+
exception = hash = nil
|
18
|
+
NewRelic::Agent.stub(:notice_error, -> exc, h { exception = exc; hash = h }) do
|
19
|
+
@appender.tagged('test') do
|
20
|
+
@appender.send(level, "AppenderNewRelicTest #{level.to_s} message")
|
21
|
+
end
|
22
|
+
end
|
23
|
+
assert_nil exception
|
24
|
+
assert_nil hash
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
[:error, :fatal].each do |level|
|
29
|
+
it "sends :#{level.to_s} notifications to New Relic" do
|
30
|
+
exception = hash = nil
|
31
|
+
NewRelic::Agent.stub(:notice_error, -> exc, h { exception = exc; hash = h }) do
|
32
|
+
@appender.tagged('test') do
|
33
|
+
@appender.send(level, @message)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
assert_equal 'RuntimeError', exception.class.to_s
|
37
|
+
assert_equal @message, exception.message
|
38
|
+
assert_equal ['test'], hash[:custom_params][:tags]
|
39
|
+
assert_nil hash[:custom_params][:duration]
|
40
|
+
assert hash[:custom_params][:thread_name], hash.inspect
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'send notification to New Relic with custom attributes' do
|
45
|
+
exception = hash = nil
|
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.benchmark(:error, @message) do
|
50
|
+
sleep 0.001
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
assert_equal 'RuntimeError', exception.class.to_s
|
56
|
+
assert_equal @message, exception.message
|
57
|
+
assert_equal ['test'], hash[:custom_params][:tags], hash
|
58
|
+
assert_equal({key1: 1, key2: 'a'}, hash[:custom_params][:payload], hash)
|
59
|
+
assert hash[:custom_params][:duration], hash
|
60
|
+
assert hash[:custom_params][:thread_name], hash
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
File without changes
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require_relative 'test_helper'
|
2
|
+
|
3
|
+
# Unit Test for SemanticLogger::Appender::Splunk
|
4
|
+
#
|
5
|
+
module Appender
|
6
|
+
class SplunkTest < Minitest::Test
|
7
|
+
describe SemanticLogger::Appender::Splunk do
|
8
|
+
|
9
|
+
describe '#parse_options' do
|
10
|
+
describe 'argument errors' do
|
11
|
+
it 'raise argument error for missing username' do
|
12
|
+
error = assert_raises ArgumentError do
|
13
|
+
SemanticLogger::Appender::Splunk.new({})
|
14
|
+
end
|
15
|
+
|
16
|
+
assert_equal 'Must supply a username.', error.message
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'raise argument error for missing password' do
|
20
|
+
error = assert_raises ArgumentError do
|
21
|
+
SemanticLogger::Appender::Splunk.new(username: 'username')
|
22
|
+
end
|
23
|
+
|
24
|
+
assert_equal 'Must supply a password.', error.message
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe 'set default values' do
|
29
|
+
it 'have default values' do
|
30
|
+
appender = Splunk.stub(:connect, Splunk::Service.new({})) do
|
31
|
+
Splunk::Service.stub_any_instance(:indexes, {}) do
|
32
|
+
SemanticLogger::Appender::Splunk.new(username: 'username', password: 'password')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
config = appender.config
|
36
|
+
# Default host
|
37
|
+
assert_equal 'localhost', config[:host]
|
38
|
+
# Default port
|
39
|
+
assert_equal 8089, config[:port]
|
40
|
+
# Default scheme
|
41
|
+
assert_equal :https, config[:scheme]
|
42
|
+
#Default index
|
43
|
+
assert_equal 'main', appender.index
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require_relative '../test_helper'
|
2
|
+
require 'net/tcp_client'
|
3
|
+
|
4
|
+
# Unit Test for SemanticLogger::Appender::Syslog
|
5
|
+
#
|
6
|
+
module Appender
|
7
|
+
class SyslogTest < Minitest::Test
|
8
|
+
describe SemanticLogger::Appender::Syslog do
|
9
|
+
|
10
|
+
it 'handle local syslog' do
|
11
|
+
message = nil
|
12
|
+
Syslog.stub(:open, nil) do
|
13
|
+
Syslog.stub(:log, -> level, msg { message = msg }) do
|
14
|
+
syslog_appender = SemanticLogger::Appender::Syslog.new(level: :debug)
|
15
|
+
syslog_appender.debug 'AppenderSyslogTest log message'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
assert_match /D (.*?) SemanticLogger::Appender::Syslog -- AppenderSyslogTest log message/, message
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'handle remote syslog over TCP' do
|
22
|
+
message = nil
|
23
|
+
Net::TCPClient.stub_any_instance(:closed?, false) do
|
24
|
+
Net::TCPClient.stub_any_instance(:connect, nil) do
|
25
|
+
syslog_appender = SemanticLogger::Appender::Syslog.new(server: 'tcp://localhost:88888', level: :debug)
|
26
|
+
syslog_appender.remote_syslog.stub(:write, Proc.new { |data| message = data }) do
|
27
|
+
syslog_appender.debug 'AppenderSyslogTest log message'
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
assert_match /<70>(.*?)SemanticLogger::Appender::Syslog -- AppenderSyslogTest log message\r\n/, message
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'handle remote syslog over UDP' do
|
35
|
+
message = nil
|
36
|
+
syslog_appender = SemanticLogger::Appender::Syslog.new(server: 'udp://localhost:88888', level: :debug)
|
37
|
+
UDPSocket.stub_any_instance(:send, -> msg, num, host, port { message = msg }) do
|
38
|
+
syslog_appender.debug 'AppenderSyslogTest log message'
|
39
|
+
end
|
40
|
+
assert_match /<70>(.*?)SemanticLogger::Appender::Syslog -- AppenderSyslogTest log message/, message
|
41
|
+
end
|
42
|
+
|
43
|
+
# Should be able to log each level.
|
44
|
+
SemanticLogger::LEVELS.each do |level|
|
45
|
+
it "log #{level} information" do
|
46
|
+
Syslog.stub(:open, nil) do
|
47
|
+
Syslog.stub(:log, nil) do
|
48
|
+
syslog_appender = SemanticLogger::Appender::Syslog.new
|
49
|
+
syslog_appender.send(level, 'AppenderSyslogTest #{level.to_s} message')
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
it 'allow logging with %' do
|
56
|
+
message = 'AppenderSyslogTest %test'
|
57
|
+
syslog_appender = SemanticLogger::Appender::Syslog.new
|
58
|
+
syslog_appender.debug(message)
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -1,8 +1,9 @@
|
|
1
|
-
require_relative 'test_helper'
|
1
|
+
require_relative '../test_helper'
|
2
2
|
|
3
3
|
# Unit Test for SemanticLogger::Appender::Wrapper
|
4
4
|
#
|
5
|
-
|
5
|
+
module Appender
|
6
|
+
class WrapperTest < Minitest::Test
|
6
7
|
describe SemanticLogger::Appender::Wrapper do
|
7
8
|
before do
|
8
9
|
@time = Time.new
|
@@ -12,8 +13,8 @@ class AppenderWrapperTest < Minitest::Test
|
|
12
13
|
@hash_str = @hash.inspect.sub("{", "\\{").sub("}", "\\}")
|
13
14
|
end
|
14
15
|
|
15
|
-
describe
|
16
|
-
it
|
16
|
+
describe 'format logs into text form' do
|
17
|
+
it 'handle nil name, message and payload' do
|
17
18
|
log = SemanticLogger::Logger::Log.new
|
18
19
|
log.time = Time.now
|
19
20
|
log.level = :debug
|
@@ -21,7 +22,7 @@ class AppenderWrapperTest < Minitest::Test
|
|
21
22
|
assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:\] -- /, @mock_logger.message
|
22
23
|
end
|
23
24
|
|
24
|
-
it
|
25
|
+
it 'handle nil message and payload' do
|
25
26
|
log = SemanticLogger::Logger::Log.new
|
26
27
|
log.time = Time.now
|
27
28
|
log.level = :debug
|
@@ -30,7 +31,7 @@ class AppenderWrapperTest < Minitest::Test
|
|
30
31
|
assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:\] class -- /, @mock_logger.message
|
31
32
|
end
|
32
33
|
|
33
|
-
it
|
34
|
+
it 'handle nil payload' do
|
34
35
|
log = SemanticLogger::Logger::Log.new
|
35
36
|
log.time = Time.now
|
36
37
|
log.level = :debug
|
@@ -40,7 +41,7 @@ class AppenderWrapperTest < Minitest::Test
|
|
40
41
|
assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ D \[\d+:\] class -- hello world/, @mock_logger.message
|
41
42
|
end
|
42
43
|
|
43
|
-
it
|
44
|
+
it 'handle payload' do
|
44
45
|
log = SemanticLogger::Logger::Log.new
|
45
46
|
log.time = Time.now
|
46
47
|
log.level = :debug
|
@@ -52,7 +53,7 @@ class AppenderWrapperTest < Minitest::Test
|
|
52
53
|
end
|
53
54
|
end
|
54
55
|
|
55
|
-
describe
|
56
|
+
describe 'for each log level' do
|
56
57
|
# Ensure that any log level can be logged
|
57
58
|
Logger::Severity.constants.each do |level|
|
58
59
|
it "log #{level.downcase.to_sym} info" do
|
@@ -64,3 +65,4 @@ class AppenderWrapperTest < Minitest::Test
|
|
64
65
|
|
65
66
|
end
|
66
67
|
end
|
68
|
+
end
|
data/test/loggable_test.rb
CHANGED
@@ -14,28 +14,38 @@ class AppenderFileTest < Minitest::Test
|
|
14
14
|
@io = StringIO.new
|
15
15
|
@appender = SemanticLogger::Appender::File.new(@io)
|
16
16
|
SemanticLogger.default_level = :trace
|
17
|
-
|
18
|
-
@
|
19
|
-
@
|
20
|
-
@
|
17
|
+
@mock_logger = MockLogger.new
|
18
|
+
@appender = SemanticLogger.add_appender(@mock_logger)
|
19
|
+
@hash = {session_id: 'HSSKLEU@JDK767', tracking_number: 12345}
|
20
|
+
@hash_str = @hash.inspect.sub("{", "\\{").sub("}", "\\}")
|
21
|
+
@thread_name = Thread.current.name
|
21
22
|
end
|
22
23
|
|
23
24
|
after do
|
24
25
|
SemanticLogger.remove_appender(@appender)
|
25
26
|
end
|
26
27
|
|
27
|
-
describe
|
28
|
+
describe 'for each log level' do
|
28
29
|
# Ensure that any log level can be logged
|
29
30
|
SemanticLogger::LEVELS.each do |level|
|
30
31
|
it "log #{level} information with class attribute" do
|
31
|
-
|
32
|
-
|
33
|
-
|
32
|
+
SemanticLogger.stub(:backtrace_level_index, 0) do
|
33
|
+
SemanticLogger.stub(:appenders, [@appender]) do
|
34
|
+
TestAttribute.logger.send(level, "hello #{level}", @hash)
|
35
|
+
SemanticLogger.flush
|
36
|
+
assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ \w \[\d+:#{@thread_name} loggable_test.rb:\d+\] TestAttribute -- hello #{level} -- #{@hash_str}/, @mock_logger.message
|
37
|
+
end
|
38
|
+
end
|
34
39
|
end
|
40
|
+
|
35
41
|
it "log #{level} information with instance attribute" do
|
36
|
-
|
37
|
-
|
38
|
-
|
42
|
+
SemanticLogger.stub(:backtrace_level_index, 0) do
|
43
|
+
SemanticLogger.stub(:appenders, [@appender]) do
|
44
|
+
TestAttribute.new.logger.send(level, "hello #{level}", @hash)
|
45
|
+
SemanticLogger.flush
|
46
|
+
assert_match /\d+-\d+-\d+ \d+:\d+:\d+.\d+ \w \[\d+:#{@thread_name} loggable_test.rb:\d+\] TestAttribute -- hello #{level} -- #{@hash_str}/, @mock_logger.message
|
47
|
+
end
|
48
|
+
end
|
39
49
|
end
|
40
50
|
end
|
41
51
|
end
|