semantic_logger 2.16.0 → 2.17.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|