TwP-logging 0.9.7
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.
- data/History.txt +169 -0
- data/README.rdoc +102 -0
- data/Rakefile +42 -0
- data/data/bad_logging_1.rb +13 -0
- data/data/bad_logging_2.rb +21 -0
- data/data/logging.rb +42 -0
- data/data/logging.yaml +63 -0
- data/data/simple_logging.rb +13 -0
- data/lib/logging.rb +408 -0
- data/lib/logging/appender.rb +303 -0
- data/lib/logging/appenders/buffering.rb +167 -0
- data/lib/logging/appenders/console.rb +62 -0
- data/lib/logging/appenders/email.rb +75 -0
- data/lib/logging/appenders/file.rb +54 -0
- data/lib/logging/appenders/growl.rb +197 -0
- data/lib/logging/appenders/io.rb +69 -0
- data/lib/logging/appenders/rolling_file.rb +291 -0
- data/lib/logging/appenders/syslog.rb +201 -0
- data/lib/logging/config/configurator.rb +190 -0
- data/lib/logging/config/yaml_configurator.rb +195 -0
- data/lib/logging/layout.rb +119 -0
- data/lib/logging/layouts/basic.rb +34 -0
- data/lib/logging/layouts/pattern.rb +296 -0
- data/lib/logging/log_event.rb +51 -0
- data/lib/logging/logger.rb +490 -0
- data/lib/logging/repository.rb +172 -0
- data/lib/logging/root_logger.rb +61 -0
- data/lib/logging/stats.rb +278 -0
- data/lib/logging/utils.rb +130 -0
- data/logging.gemspec +41 -0
- data/test/appenders/test_buffered_io.rb +183 -0
- data/test/appenders/test_console.rb +66 -0
- data/test/appenders/test_email.rb +171 -0
- data/test/appenders/test_file.rb +93 -0
- data/test/appenders/test_growl.rb +128 -0
- data/test/appenders/test_io.rb +142 -0
- data/test/appenders/test_rolling_file.rb +207 -0
- data/test/appenders/test_syslog.rb +194 -0
- data/test/benchmark.rb +87 -0
- data/test/config/test_configurator.rb +70 -0
- data/test/config/test_yaml_configurator.rb +40 -0
- data/test/layouts/test_basic.rb +43 -0
- data/test/layouts/test_pattern.rb +177 -0
- data/test/setup.rb +74 -0
- data/test/test_appender.rb +166 -0
- data/test/test_layout.rb +110 -0
- data/test/test_log_event.rb +80 -0
- data/test/test_logger.rb +734 -0
- data/test/test_logging.rb +267 -0
- data/test/test_repository.rb +126 -0
- data/test/test_root_logger.rb +81 -0
- data/test/test_stats.rb +274 -0
- data/test/test_utils.rb +116 -0
- metadata +156 -0
data/test/setup.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
|
2
|
+
# Equivalent to a header guard in C/C++
|
3
|
+
# Used to prevent the class/module from being loaded more than once
|
4
|
+
unless defined? LOGGING_TEST_SETUP
|
5
|
+
LOGGING_TEST_SETUP = true
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'test/unit'
|
9
|
+
require 'fileutils'
|
10
|
+
require 'stringio'
|
11
|
+
begin
|
12
|
+
require 'turn'
|
13
|
+
rescue LoadError; end
|
14
|
+
|
15
|
+
# This line is needed for Ruby 1.9 -- hashes throw a "KeyError" in 1.9
|
16
|
+
# whereas they throw an "IndexError" in 1.8
|
17
|
+
#
|
18
|
+
KeyError = IndexError if not defined? KeyError
|
19
|
+
|
20
|
+
require File.join(File.dirname(__FILE__), %w[.. lib logging])
|
21
|
+
|
22
|
+
|
23
|
+
module TestLogging
|
24
|
+
module LoggingTestCase
|
25
|
+
|
26
|
+
TMP = 'tmp'
|
27
|
+
|
28
|
+
def setup
|
29
|
+
super
|
30
|
+
|
31
|
+
FileUtils.rm_rf TMP
|
32
|
+
FileUtils.mkdir TMP
|
33
|
+
|
34
|
+
::Logging.module_eval do
|
35
|
+
::Logging::LEVELS.clear
|
36
|
+
::Logging::LNAMES.clear
|
37
|
+
remove_const :MAX_LEVEL_LENGTH if const_defined? :MAX_LEVEL_LENGTH
|
38
|
+
remove_const :OBJ_FORMAT if const_defined? :OBJ_FORMAT
|
39
|
+
end
|
40
|
+
|
41
|
+
::Logging::Repository.class_eval do
|
42
|
+
if defined?(@singleton__instance__)
|
43
|
+
@singleton__instance__ = nil
|
44
|
+
else
|
45
|
+
@__instance__ = nil
|
46
|
+
class << self
|
47
|
+
nonce = class << Singleton; self; end
|
48
|
+
if defined?(nonce::FirstInstanceCall)
|
49
|
+
define_method(:instance, nonce::FirstInstanceCall)
|
50
|
+
else
|
51
|
+
remove_method(:instance)
|
52
|
+
Singleton.__init__(::Logging::Repository)
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def teardown
|
60
|
+
super
|
61
|
+
::Logging.backtrace
|
62
|
+
::Logging.__send__(:remove_instance_variable, :@backtrace)
|
63
|
+
h = ::Logging::Appender.instance_variable_get(:@appenders)
|
64
|
+
h.each_value {|a| a.close(false) unless a.nil? || a.closed?}
|
65
|
+
h.clear
|
66
|
+
FileUtils.rm_rf TMP
|
67
|
+
end
|
68
|
+
|
69
|
+
end # module LoggingTestCase
|
70
|
+
end # module TestLogging
|
71
|
+
|
72
|
+
end # unless defined?
|
73
|
+
|
74
|
+
# EOF
|
@@ -0,0 +1,166 @@
|
|
1
|
+
|
2
|
+
require File.join(File.dirname(__FILE__), %w[setup])
|
3
|
+
|
4
|
+
module TestLogging
|
5
|
+
|
6
|
+
class TestAppender < Test::Unit::TestCase
|
7
|
+
include LoggingTestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
super
|
11
|
+
|
12
|
+
::Logging.init
|
13
|
+
@levels = ::Logging::LEVELS
|
14
|
+
@event = ::Logging::LogEvent.new('logger', @levels['debug'],
|
15
|
+
'message', false)
|
16
|
+
@appender = ::Logging::Appender.new 'test_appender'
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_append
|
20
|
+
ary = []
|
21
|
+
@appender.instance_variable_set :@ary, ary
|
22
|
+
def @appender.write( event )
|
23
|
+
str = event.instance_of?(::Logging::LogEvent) ?
|
24
|
+
@layout.format(event) : event.to_s
|
25
|
+
@ary << str
|
26
|
+
end
|
27
|
+
|
28
|
+
assert_nothing_raised {@appender.append @event}
|
29
|
+
assert_equal "DEBUG logger : message\n", ary.pop
|
30
|
+
|
31
|
+
@appender.level = :info
|
32
|
+
@appender.append @event
|
33
|
+
assert_nil ary.pop
|
34
|
+
|
35
|
+
@event.level = @levels['info']
|
36
|
+
@appender.append @event
|
37
|
+
assert_equal " INFO logger : message\n", ary.pop
|
38
|
+
|
39
|
+
@appender.close
|
40
|
+
assert_raise(RuntimeError) {@appender.append @event}
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_class_stderr
|
44
|
+
stderr = ::Logging::Appender.stderr
|
45
|
+
assert_instance_of ::Logging::Appenders::Stderr, stderr
|
46
|
+
assert_equal 'stderr', stderr.name
|
47
|
+
assert_same stderr, ::Logging::Appender.stderr
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_class_stdout
|
51
|
+
stdout = ::Logging::Appender.stdout
|
52
|
+
assert_instance_of ::Logging::Appenders::Stdout, stdout
|
53
|
+
assert_equal 'stdout', stdout.name
|
54
|
+
assert_same stdout, ::Logging::Appender.stdout
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_close
|
58
|
+
assert_equal false, @appender.closed?
|
59
|
+
|
60
|
+
@appender.close
|
61
|
+
assert_equal true, @appender.closed?
|
62
|
+
end
|
63
|
+
|
64
|
+
def test_closed_eh
|
65
|
+
assert_equal false, @appender.closed?
|
66
|
+
|
67
|
+
@appender.close
|
68
|
+
assert_equal true, @appender.closed?
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_concat
|
72
|
+
ary = []
|
73
|
+
@appender.instance_variable_set :@ary, ary
|
74
|
+
def @appender.write( event )
|
75
|
+
str = event.instance_of?(::Logging::LogEvent) ?
|
76
|
+
@layout.format(event) : event.to_s
|
77
|
+
@ary << str
|
78
|
+
end
|
79
|
+
|
80
|
+
assert_nothing_raised {@appender << 'log message'}
|
81
|
+
assert_equal 'log message', ary.pop
|
82
|
+
|
83
|
+
@appender.level = :off
|
84
|
+
@appender << 'another log message'
|
85
|
+
assert_nil ary.pop
|
86
|
+
|
87
|
+
layout = @appender.layout
|
88
|
+
def layout.footer() 'this is the footer' end
|
89
|
+
|
90
|
+
@appender.close
|
91
|
+
assert_raise(RuntimeError) {@appender << 'log message'}
|
92
|
+
assert_equal 'this is the footer', ary.pop
|
93
|
+
end
|
94
|
+
|
95
|
+
def test_flush
|
96
|
+
assert_same @appender, @appender.flush
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_initialize
|
100
|
+
assert_raise(TypeError) {::Logging::Appender.new 'test', :layout => []}
|
101
|
+
|
102
|
+
layout = ::Logging::Layouts::Basic.new
|
103
|
+
@appender = ::Logging::Appender.new 'test', :layout => layout
|
104
|
+
assert_same layout, @appender.instance_variable_get(:@layout)
|
105
|
+
end
|
106
|
+
|
107
|
+
def test_layout
|
108
|
+
assert_instance_of ::Logging::Layouts::Basic, @appender.layout
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_layout_eq
|
112
|
+
layout = ::Logging::Layouts::Basic.new
|
113
|
+
assert_not_equal layout, @appender.layout
|
114
|
+
|
115
|
+
assert_raise(TypeError) {@appender.layout = Object.new}
|
116
|
+
assert_raise(TypeError) {@appender.layout = 'not a layout'}
|
117
|
+
|
118
|
+
@appender.layout = layout
|
119
|
+
assert_same layout, @appender.layout
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_level
|
123
|
+
assert_equal 0, @appender.level
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_level_eq
|
127
|
+
assert_equal 0, @appender.level
|
128
|
+
|
129
|
+
assert_raise(ArgumentError) {@appender.level = -1}
|
130
|
+
assert_raise(ArgumentError) {@appender.level = 6}
|
131
|
+
assert_raise(ArgumentError) {@appender.level = Object}
|
132
|
+
assert_raise(ArgumentError) {@appender.level = 'bob'}
|
133
|
+
assert_raise(ArgumentError) {@appender.level = :wtf}
|
134
|
+
|
135
|
+
@appender.level = 'INFO'
|
136
|
+
assert_equal 1, @appender.level
|
137
|
+
|
138
|
+
@appender.level = :warn
|
139
|
+
assert_equal 2, @appender.level
|
140
|
+
|
141
|
+
@appender.level = 'error'
|
142
|
+
assert_equal 3, @appender.level
|
143
|
+
|
144
|
+
@appender.level = 4
|
145
|
+
assert_equal 4, @appender.level
|
146
|
+
|
147
|
+
@appender.level = 'off'
|
148
|
+
assert_equal 5, @appender.level
|
149
|
+
|
150
|
+
@appender.level = :all
|
151
|
+
assert_equal 0, @appender.level
|
152
|
+
end
|
153
|
+
|
154
|
+
def test_name
|
155
|
+
assert_equal 'test_appender', @appender.name
|
156
|
+
end
|
157
|
+
|
158
|
+
def test_inspect
|
159
|
+
expected = "<Appender:0x%x name=\"test_appender\">" % @appender.object_id
|
160
|
+
assert_equal expected, @appender.inspect
|
161
|
+
end
|
162
|
+
|
163
|
+
end # class TestAppender
|
164
|
+
end # module TestLogging
|
165
|
+
|
166
|
+
# EOF
|
data/test/test_layout.rb
ADDED
@@ -0,0 +1,110 @@
|
|
1
|
+
|
2
|
+
require File.join(File.dirname(__FILE__), %w[setup])
|
3
|
+
|
4
|
+
module TestLogging
|
5
|
+
|
6
|
+
class TestLayout < Test::Unit::TestCase
|
7
|
+
include LoggingTestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
super
|
11
|
+
@layout = ::Logging::Layout.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_header
|
15
|
+
assert_equal '', @layout.header
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_initialize
|
19
|
+
obj_format = lambda {|l| l.instance_variable_get :@obj_format}
|
20
|
+
|
21
|
+
assert_equal :string, obj_format[@layout]
|
22
|
+
|
23
|
+
@layout = ::Logging::Layout.new 'format_as' => 'blah'
|
24
|
+
assert_equal :string, obj_format[@layout]
|
25
|
+
|
26
|
+
@layout = ::Logging::Layout.new :format_as => :inspect
|
27
|
+
assert_equal :inspect, obj_format[@layout]
|
28
|
+
|
29
|
+
@layout = ::Logging::Layout.new 'format_as' => :yaml
|
30
|
+
assert_equal :yaml, obj_format[@layout]
|
31
|
+
|
32
|
+
@layout = ::Logging::Layout.new
|
33
|
+
assert_equal :string, obj_format[@layout]
|
34
|
+
|
35
|
+
::Logging.format_as :yaml
|
36
|
+
@layout = ::Logging::Layout.new
|
37
|
+
assert_equal :yaml, obj_format[@layout]
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_footer
|
41
|
+
assert_equal '', @layout.footer
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_format
|
45
|
+
assert_nil @layout.format(::Logging::LogEvent.new('a','b','c',false))
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_format_obj
|
49
|
+
obj = 'test string'
|
50
|
+
r = @layout.format_obj obj
|
51
|
+
assert_same obj, r
|
52
|
+
|
53
|
+
obj = RuntimeError.new
|
54
|
+
r = @layout.format_obj obj
|
55
|
+
assert_equal '<RuntimeError> RuntimeError', r
|
56
|
+
|
57
|
+
obj = TypeError.new 'only works with Integers'
|
58
|
+
r = @layout.format_obj obj
|
59
|
+
assert_equal '<TypeError> only works with Integers', r
|
60
|
+
|
61
|
+
obj = Exception.new 'some exception'
|
62
|
+
obj.set_backtrace %w( this is the backtrace )
|
63
|
+
r = @layout.format_obj obj
|
64
|
+
obj = "<Exception> some exception\n\tthis\n\tis\n\tthe\n\tbacktrace"
|
65
|
+
assert_equal obj, r
|
66
|
+
|
67
|
+
obj = [1, 2, 3, 4]
|
68
|
+
r = @layout.format_obj obj
|
69
|
+
assert_equal "<Array> #{[1,2,3,4]}", r
|
70
|
+
|
71
|
+
obj = %w( one two three four )
|
72
|
+
@layout = ::Logging::Layout.new :format_as => :inspect
|
73
|
+
r = @layout.format_obj obj
|
74
|
+
assert_equal '<Array> ["one", "two", "three", "four"]', r
|
75
|
+
|
76
|
+
@layout = ::Logging::Layout.new :format_as => :yaml
|
77
|
+
r = @layout.format_obj obj
|
78
|
+
assert_equal "<Array> \n--- \n- one\n- two\n- three\n- four\n", r
|
79
|
+
|
80
|
+
r = @layout.format_obj Class
|
81
|
+
assert_equal "<Class> Class", r
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_format_obj_without_backtrace
|
85
|
+
@layout = ::Logging::Layout.new :backtrace => 'off'
|
86
|
+
|
87
|
+
obj = Exception.new 'some exception'
|
88
|
+
obj.set_backtrace %w( this is the backtrace )
|
89
|
+
r = @layout.format_obj obj
|
90
|
+
obj = "<Exception> some exception"
|
91
|
+
assert_equal obj, r
|
92
|
+
|
93
|
+
::Logging.backtrace :off
|
94
|
+
@layout = ::Logging::Layout.new
|
95
|
+
|
96
|
+
obj = ArgumentError.new 'wrong type of argument'
|
97
|
+
obj.set_backtrace %w( this is the backtrace )
|
98
|
+
r = @layout.format_obj obj
|
99
|
+
obj = "<ArgumentError> wrong type of argument"
|
100
|
+
assert_equal obj, r
|
101
|
+
end
|
102
|
+
|
103
|
+
def test_initializer
|
104
|
+
assert_raise(ArgumentError) {::Logging::Layout.new :backtrace => 'foo'}
|
105
|
+
end
|
106
|
+
|
107
|
+
end # class TestLayout
|
108
|
+
end # module TestLogging
|
109
|
+
|
110
|
+
# EOF
|
@@ -0,0 +1,80 @@
|
|
1
|
+
|
2
|
+
require File.join(File.dirname(__FILE__), %w[setup])
|
3
|
+
|
4
|
+
module TestLogging
|
5
|
+
|
6
|
+
class TestLogEvent < Test::Unit::TestCase
|
7
|
+
include LoggingTestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
super
|
11
|
+
|
12
|
+
@appender = EventAppender.new('test')
|
13
|
+
@logger = ::Logging::Logger['TestLogger']
|
14
|
+
@logger.add_appenders @appender
|
15
|
+
|
16
|
+
@logger.info 'message 1'
|
17
|
+
@event = @appender.event
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_data
|
21
|
+
assert_equal 'message 1', @event.data
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_data_eq
|
25
|
+
@event.data = 'message 2'
|
26
|
+
assert_equal 'message 2', @event.data
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_file
|
30
|
+
assert_equal '', @event.file
|
31
|
+
|
32
|
+
@logger.trace = true
|
33
|
+
@logger.warn 'warning message'
|
34
|
+
assert_match %r/test_log_event.rb\z/, @appender.event.file
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_level
|
38
|
+
assert_equal 1, @event.level
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_level_eq
|
42
|
+
@event.level = 3
|
43
|
+
assert_equal 3, @event.level
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_line
|
47
|
+
assert_equal '', @event.file
|
48
|
+
|
49
|
+
@logger.trace = true
|
50
|
+
@logger.error 'error message'
|
51
|
+
assert_match %r/\d+/, @appender.event.line
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_logger
|
55
|
+
assert_equal 'TestLogger', @event.logger
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_logger_eq
|
59
|
+
@event.logger = 'MyLogger'
|
60
|
+
assert_equal 'MyLogger', @event.logger
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_method
|
64
|
+
assert_equal '', @event.file
|
65
|
+
|
66
|
+
@logger.trace = true
|
67
|
+
@logger.debug 'debug message'
|
68
|
+
assert_equal 'test_method', @appender.event.method
|
69
|
+
end
|
70
|
+
|
71
|
+
end # class TestLogEvent
|
72
|
+
|
73
|
+
class EventAppender < ::Logging::Appender
|
74
|
+
attr_reader :event
|
75
|
+
def append( event ) @event = event end
|
76
|
+
end
|
77
|
+
|
78
|
+
end # module TestLogging
|
79
|
+
|
80
|
+
# EOF
|
data/test/test_logger.rb
ADDED
@@ -0,0 +1,734 @@
|
|
1
|
+
|
2
|
+
require File.join(File.dirname(__FILE__), %w[setup])
|
3
|
+
|
4
|
+
module TestLogging
|
5
|
+
|
6
|
+
class TestLogger < Test::Unit::TestCase
|
7
|
+
include LoggingTestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
super
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_initialize
|
14
|
+
assert_nothing_raised {::Logging::Logger[:test]}
|
15
|
+
assert_equal ::Logging::Logger[:test], ::Logging::Logger['test']
|
16
|
+
assert_nothing_raised {::Logging::Logger.new(Object)}
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_add
|
20
|
+
root = ::Logging::Logger[:root]
|
21
|
+
root.level = 'info'
|
22
|
+
|
23
|
+
a1 = SioAppender.new 'a1'
|
24
|
+
a2 = SioAppender.new 'a2'
|
25
|
+
log = ::Logging::Logger.new 'A Logger'
|
26
|
+
|
27
|
+
root.add_appenders a1
|
28
|
+
assert_nil a1.readline
|
29
|
+
assert_nil a2.readline
|
30
|
+
|
31
|
+
log.add(0, 'this should NOT be logged')
|
32
|
+
assert_nil a1.readline
|
33
|
+
assert_nil a2.readline
|
34
|
+
|
35
|
+
log.add(1, 'this should be logged')
|
36
|
+
assert_equal " INFO A Logger : this should be logged\n", a1.readline
|
37
|
+
assert_nil a1.readline
|
38
|
+
assert_nil a2.readline
|
39
|
+
|
40
|
+
log.add(2,[1,2,3,4])
|
41
|
+
assert_equal " WARN A Logger : <Array> #{[1,2,3,4]}\n", a1.readline
|
42
|
+
assert_nil a1.readline
|
43
|
+
assert_nil a2.readline
|
44
|
+
|
45
|
+
log.add_appenders a2
|
46
|
+
log.add(3, 'an error has occurred')
|
47
|
+
assert_equal "ERROR A Logger : an error has occurred\n", a1.readline
|
48
|
+
assert_equal "ERROR A Logger : an error has occurred\n", a2.readline
|
49
|
+
assert_nil a1.readline
|
50
|
+
assert_nil a2.readline
|
51
|
+
|
52
|
+
log.additive = false
|
53
|
+
log.add(3, 'another error has occurred')
|
54
|
+
assert_equal "ERROR A Logger : another error has occurred\n", a2.readline
|
55
|
+
assert_nil a1.readline
|
56
|
+
assert_nil a2.readline
|
57
|
+
|
58
|
+
log.add_appenders a1
|
59
|
+
log.add(4, 'fatal exception')
|
60
|
+
assert_equal "FATAL A Logger : fatal exception\n", a1.readline
|
61
|
+
assert_equal "FATAL A Logger : fatal exception\n", a2.readline
|
62
|
+
assert_nil a1.readline
|
63
|
+
assert_nil a2.readline
|
64
|
+
|
65
|
+
|
66
|
+
log.level = :warn
|
67
|
+
log.add(2) do
|
68
|
+
str = 'a string of data'
|
69
|
+
str
|
70
|
+
end
|
71
|
+
assert_equal " WARN A Logger : a string of data\n", a1.readline
|
72
|
+
assert_equal " WARN A Logger : a string of data\n", a2.readline
|
73
|
+
assert_nil a1.readline
|
74
|
+
assert_nil a2.readline
|
75
|
+
|
76
|
+
log.add(1) do
|
77
|
+
rb_raise(RuntimeError, "this block should not be executed")
|
78
|
+
end
|
79
|
+
assert_nil a1.readline
|
80
|
+
assert_nil a2.readline
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_add_appenders
|
84
|
+
log = ::Logging::Logger.new 'A'
|
85
|
+
|
86
|
+
appenders = lambda {log.instance_variable_get :@appenders}
|
87
|
+
assert_equal [], appenders[]
|
88
|
+
|
89
|
+
assert_raise(ArgumentError) {log.add_appenders Object.new}
|
90
|
+
assert_raise(ArgumentError) {log.add_appenders 'not an appender'}
|
91
|
+
|
92
|
+
a = ::Logging::Appender.new 'test_appender_1'
|
93
|
+
b = ::Logging::Appender.new 'test_appender_2'
|
94
|
+
c = ::Logging::Appender.new 'test_appender_3'
|
95
|
+
|
96
|
+
log.add_appenders a
|
97
|
+
assert_equal [a], appenders[]
|
98
|
+
|
99
|
+
log.add_appenders a
|
100
|
+
assert_equal [a], appenders[]
|
101
|
+
|
102
|
+
log.add_appenders b
|
103
|
+
assert_equal [a,b], appenders[]
|
104
|
+
|
105
|
+
log.add_appenders c
|
106
|
+
assert_equal [a,b,c], appenders[]
|
107
|
+
|
108
|
+
log.add_appenders a, c
|
109
|
+
assert_equal [a,b,c], appenders[]
|
110
|
+
|
111
|
+
log.clear_appenders
|
112
|
+
assert_equal [], appenders[]
|
113
|
+
|
114
|
+
log.add_appenders a, c
|
115
|
+
assert_equal [a,c], appenders[]
|
116
|
+
end
|
117
|
+
|
118
|
+
def test_additive
|
119
|
+
root = ::Logging::Logger.new :root
|
120
|
+
log = ::Logging::Logger.new 'A'
|
121
|
+
|
122
|
+
assert_raise(NoMethodError) {root.additive}
|
123
|
+
assert_equal true, log.additive
|
124
|
+
end
|
125
|
+
|
126
|
+
def test_additive_eq
|
127
|
+
root = ::Logging::Logger.new :root
|
128
|
+
log = ::Logging::Logger.new 'A'
|
129
|
+
|
130
|
+
assert_raise(NoMethodError) {root.additive = false}
|
131
|
+
assert_equal true, log.additive
|
132
|
+
|
133
|
+
log.additive = false
|
134
|
+
assert_equal false, log.additive
|
135
|
+
|
136
|
+
log.additive = true
|
137
|
+
assert_equal true, log.additive
|
138
|
+
|
139
|
+
log.additive = 'false'
|
140
|
+
assert_equal false, log.additive
|
141
|
+
|
142
|
+
log.additive = 'true'
|
143
|
+
assert_equal true, log.additive
|
144
|
+
|
145
|
+
log.additive = nil
|
146
|
+
assert_equal true, log.additive
|
147
|
+
|
148
|
+
assert_raise(ArgumentError) {log.additive = Object}
|
149
|
+
end
|
150
|
+
|
151
|
+
def test_appenders_eq
|
152
|
+
log = ::Logging::Logger.new '42'
|
153
|
+
|
154
|
+
appenders = lambda {log.instance_variable_get :@appenders}
|
155
|
+
assert_equal [], appenders[]
|
156
|
+
|
157
|
+
assert_raise(ArgumentError) {log.appenders = Object.new}
|
158
|
+
assert_raise(ArgumentError) {log.appenders = 'not an appender'}
|
159
|
+
|
160
|
+
a = ::Logging::Appender.new 'test_appender_1'
|
161
|
+
b = ::Logging::Appender.new 'test_appender_2'
|
162
|
+
c = ::Logging::Appender.new 'test_appender_3'
|
163
|
+
|
164
|
+
log.appenders = a, b, c
|
165
|
+
assert_equal [a, b, c], appenders[]
|
166
|
+
|
167
|
+
log.appenders = b
|
168
|
+
assert_equal [b], appenders[]
|
169
|
+
|
170
|
+
log.appenders = c, a, b
|
171
|
+
assert_equal [c,a,b], appenders[]
|
172
|
+
|
173
|
+
log.appenders = nil
|
174
|
+
assert_equal [], appenders[]
|
175
|
+
|
176
|
+
log.appenders = %w[test_appender_1 test_appender_3]
|
177
|
+
assert_equal [a,c], appenders[]
|
178
|
+
|
179
|
+
assert_raise(ArgumentError) {log.appenders = 'unknown'}
|
180
|
+
end
|
181
|
+
|
182
|
+
def test_class_aref
|
183
|
+
root = ::Logging::Logger[:root]
|
184
|
+
assert_same root, ::Logging::Logger[:root]
|
185
|
+
|
186
|
+
a = []
|
187
|
+
assert_same ::Logging::Logger['Array'], ::Logging::Logger[Array]
|
188
|
+
assert_same ::Logging::Logger['Array'], ::Logging::Logger[a]
|
189
|
+
|
190
|
+
assert_not_same ::Logging::Logger['Array'], ::Logging::Logger[:root]
|
191
|
+
assert_not_same ::Logging::Logger['A'], ::Logging::Logger['A::B']
|
192
|
+
end
|
193
|
+
|
194
|
+
def test_class_root
|
195
|
+
root = ::Logging::Logger[:root]
|
196
|
+
assert_same root, ::Logging::Logger.root
|
197
|
+
end
|
198
|
+
|
199
|
+
def test_clear_appenders
|
200
|
+
log = ::Logging::Logger.new 'Elliott'
|
201
|
+
|
202
|
+
appenders = lambda {log.instance_variable_get :@appenders}
|
203
|
+
assert_equal [], appenders[]
|
204
|
+
|
205
|
+
a = ::Logging::Appender.new 'test_appender_1'
|
206
|
+
b = ::Logging::Appender.new 'test_appender_2'
|
207
|
+
c = ::Logging::Appender.new 'test_appender_3'
|
208
|
+
|
209
|
+
log.add_appenders a, b, c
|
210
|
+
assert_equal [a,b,c], appenders[]
|
211
|
+
|
212
|
+
log.clear_appenders
|
213
|
+
assert_equal [], appenders[]
|
214
|
+
end
|
215
|
+
|
216
|
+
def test_concat
|
217
|
+
a1 = SioAppender.new 'a1'
|
218
|
+
a2 = SioAppender.new 'a2'
|
219
|
+
log = ::Logging::Logger.new 'A'
|
220
|
+
|
221
|
+
::Logging::Logger[:root].add_appenders a1
|
222
|
+
assert_nil a1.readline
|
223
|
+
assert_nil a2.readline
|
224
|
+
|
225
|
+
log << "this is line one of the log file\n"
|
226
|
+
assert_equal "this is line one of the log file\n", a1.readline
|
227
|
+
assert_nil a1.readline
|
228
|
+
assert_nil a2.readline
|
229
|
+
|
230
|
+
log << "this is line two of the log file\n"
|
231
|
+
log << "this is line three of the log file\n"
|
232
|
+
assert_equal "this is line two of the log file\n", a1.readline
|
233
|
+
assert_equal "this is line three of the log file\n", a1.readline
|
234
|
+
assert_nil a1.readline
|
235
|
+
assert_nil a2.readline
|
236
|
+
|
237
|
+
log.add_appenders a2
|
238
|
+
log << "this is line four of the log file\n"
|
239
|
+
assert_equal "this is line four of the log file\n", a1.readline
|
240
|
+
assert_equal "this is line four of the log file\n", a2.readline
|
241
|
+
assert_nil a1.readline
|
242
|
+
assert_nil a2.readline
|
243
|
+
|
244
|
+
log.additive = false
|
245
|
+
log << "this is line five of the log file\n"
|
246
|
+
assert_equal "this is line five of the log file\n", a2.readline
|
247
|
+
assert_nil a1.readline
|
248
|
+
assert_nil a2.readline
|
249
|
+
|
250
|
+
log.add_appenders a1
|
251
|
+
log << "this is line six of the log file\n"
|
252
|
+
assert_equal "this is line six of the log file\n", a1.readline
|
253
|
+
assert_equal "this is line six of the log file\n", a2.readline
|
254
|
+
assert_nil a1.readline
|
255
|
+
assert_nil a2.readline
|
256
|
+
end
|
257
|
+
|
258
|
+
def test_inspect
|
259
|
+
root = ::Logging::Logger.new :root
|
260
|
+
|
261
|
+
str = "<#{root.class.name}:0x%x name=\"#{root.name}\">" % root.object_id
|
262
|
+
assert_equal str, root.inspect
|
263
|
+
end
|
264
|
+
|
265
|
+
def test_level
|
266
|
+
root = ::Logging::Logger.new :root
|
267
|
+
log = ::Logging::Logger.new 'A'
|
268
|
+
|
269
|
+
assert_equal 0, root.level
|
270
|
+
assert_equal 0, log.level
|
271
|
+
|
272
|
+
root.level = :warn
|
273
|
+
assert_equal 2, root.level
|
274
|
+
assert_equal 2, log.level
|
275
|
+
|
276
|
+
log.level = nil
|
277
|
+
assert_equal 2, root.level
|
278
|
+
assert_equal 2, log.level
|
279
|
+
|
280
|
+
log.level = :error
|
281
|
+
assert_equal 2, root.level
|
282
|
+
assert_equal 3, log.level
|
283
|
+
end
|
284
|
+
|
285
|
+
def test_level_eq
|
286
|
+
root = ::Logging::Logger.new :root
|
287
|
+
log = ::Logging::Logger.new 'A'
|
288
|
+
logb = ::Logging::Logger.new 'A::B'
|
289
|
+
|
290
|
+
assert_equal 0, root.level
|
291
|
+
assert_equal 0, log.level
|
292
|
+
assert_equal 0, logb.level
|
293
|
+
assert_equal true, root.debug?
|
294
|
+
assert_equal true, log.debug?
|
295
|
+
assert_equal true, logb.debug?
|
296
|
+
|
297
|
+
assert_raise(ArgumentError) {root.level = -1}
|
298
|
+
assert_raise(ArgumentError) {root.level = 6}
|
299
|
+
assert_raise(ArgumentError) {root.level = Object}
|
300
|
+
assert_raise(ArgumentError) {root.level = 'bob'}
|
301
|
+
assert_raise(ArgumentError) {root.level = :wtf}
|
302
|
+
|
303
|
+
root.level = 'INFO'
|
304
|
+
assert_equal 1, root.level
|
305
|
+
assert_equal 1, log.level
|
306
|
+
assert_equal 1, logb.level
|
307
|
+
assert_equal false, root.debug?
|
308
|
+
assert_equal true, root.info?
|
309
|
+
assert_equal false, log.debug?
|
310
|
+
assert_equal true , log.info?
|
311
|
+
assert_equal false, logb.debug?
|
312
|
+
assert_equal true , logb.info?
|
313
|
+
|
314
|
+
root.level = :warn
|
315
|
+
assert_equal 2, root.level
|
316
|
+
assert_equal 2, log.level
|
317
|
+
assert_equal 2, logb.level
|
318
|
+
assert_equal false, root.info?
|
319
|
+
assert_equal true, root.warn?
|
320
|
+
assert_equal false, log.info?
|
321
|
+
assert_equal true , log.warn?
|
322
|
+
assert_equal false, logb.info?
|
323
|
+
assert_equal true , logb.warn?
|
324
|
+
|
325
|
+
root.level = 'error'
|
326
|
+
assert_equal 3, root.level
|
327
|
+
assert_equal 3, log.level
|
328
|
+
assert_equal 3, logb.level
|
329
|
+
assert_equal false, root.warn?
|
330
|
+
assert_equal true, root.error?
|
331
|
+
assert_equal false, log.warn?
|
332
|
+
assert_equal true , log.error?
|
333
|
+
assert_equal false, logb.warn?
|
334
|
+
assert_equal true , logb.error?
|
335
|
+
|
336
|
+
root.level = 4
|
337
|
+
assert_equal 4, root.level
|
338
|
+
assert_equal 4, log.level
|
339
|
+
assert_equal 4, logb.level
|
340
|
+
assert_equal false, root.error?
|
341
|
+
assert_equal true, root.fatal?
|
342
|
+
assert_equal false, log.error?
|
343
|
+
assert_equal true , log.fatal?
|
344
|
+
assert_equal false, logb.error?
|
345
|
+
assert_equal true , logb.fatal?
|
346
|
+
|
347
|
+
log.level = nil
|
348
|
+
assert_equal 4, root.level
|
349
|
+
assert_equal 4, log.level
|
350
|
+
assert_equal 4, logb.level
|
351
|
+
assert_equal false, root.error?
|
352
|
+
assert_equal true, root.fatal?
|
353
|
+
assert_equal false, log.error?
|
354
|
+
assert_equal true , log.fatal?
|
355
|
+
assert_equal false, logb.error?
|
356
|
+
assert_equal true , logb.fatal?
|
357
|
+
|
358
|
+
log.level = :DEBUG
|
359
|
+
assert_equal 4, root.level
|
360
|
+
assert_equal 0, log.level
|
361
|
+
assert_equal 0, logb.level
|
362
|
+
assert_equal false, root.error?
|
363
|
+
assert_equal true, root.fatal?
|
364
|
+
assert_equal true, log.debug?
|
365
|
+
assert_equal true, logb.debug?
|
366
|
+
|
367
|
+
log.level = :off
|
368
|
+
assert_equal 4, root.level
|
369
|
+
assert_equal 5, log.level
|
370
|
+
assert_equal 5, logb.level
|
371
|
+
assert_equal false, root.error?
|
372
|
+
assert_equal true, root.fatal?
|
373
|
+
assert_equal false, log.fatal?
|
374
|
+
assert_equal false, logb.fatal?
|
375
|
+
|
376
|
+
root.level = :all
|
377
|
+
assert_equal 0, root.level
|
378
|
+
assert_equal 5, log.level
|
379
|
+
assert_equal 5, logb.level
|
380
|
+
assert_equal true, root.debug?
|
381
|
+
assert_equal false, log.fatal?
|
382
|
+
assert_equal false, logb.fatal?
|
383
|
+
|
384
|
+
log.level = nil
|
385
|
+
assert_equal 0, root.level
|
386
|
+
assert_equal 0, log.level
|
387
|
+
assert_equal 0, logb.level
|
388
|
+
assert_equal true, root.debug?
|
389
|
+
assert_equal true, log.debug?
|
390
|
+
assert_equal true, logb.debug?
|
391
|
+
|
392
|
+
logb.level = :warn
|
393
|
+
assert_equal 0, root.level
|
394
|
+
assert_equal 0, log.level
|
395
|
+
assert_equal 2, logb.level
|
396
|
+
assert_equal true, root.debug?
|
397
|
+
assert_equal true, log.debug?
|
398
|
+
assert_equal false, logb.info?
|
399
|
+
assert_equal true, logb.warn?
|
400
|
+
|
401
|
+
log.level = :info
|
402
|
+
logb.level = nil
|
403
|
+
assert_equal 0, root.level
|
404
|
+
assert_equal 1, log.level
|
405
|
+
assert_equal 1, logb.level
|
406
|
+
assert_equal true, root.debug?
|
407
|
+
assert_equal false, logb.debug?
|
408
|
+
assert_equal true, log.info?
|
409
|
+
assert_equal false, logb.debug?
|
410
|
+
assert_equal true, logb.info?
|
411
|
+
end
|
412
|
+
|
413
|
+
def test_log
|
414
|
+
root = ::Logging::Logger[:root]
|
415
|
+
root.level = 'info'
|
416
|
+
|
417
|
+
a1 = SioAppender.new 'a1'
|
418
|
+
a2 = SioAppender.new 'a2'
|
419
|
+
log = ::Logging::Logger.new 'A Logger'
|
420
|
+
|
421
|
+
root.add_appenders a1
|
422
|
+
assert_nil a1.readline
|
423
|
+
assert_nil a2.readline
|
424
|
+
|
425
|
+
log.debug 'this should NOT be logged'
|
426
|
+
assert_nil a1.readline
|
427
|
+
assert_nil a2.readline
|
428
|
+
|
429
|
+
log.info 'this should be logged'
|
430
|
+
assert_equal " INFO A Logger : this should be logged\n", a1.readline
|
431
|
+
assert_nil a1.readline
|
432
|
+
assert_nil a2.readline
|
433
|
+
|
434
|
+
log.warn [1,2,3,4]
|
435
|
+
assert_equal " WARN A Logger : <Array> #{[1,2,3,4]}\n", a1.readline
|
436
|
+
assert_nil a1.readline
|
437
|
+
assert_nil a2.readline
|
438
|
+
|
439
|
+
log.add_appenders a2
|
440
|
+
log.error 'an error has occurred'
|
441
|
+
assert_equal "ERROR A Logger : an error has occurred\n", a1.readline
|
442
|
+
assert_equal "ERROR A Logger : an error has occurred\n", a2.readline
|
443
|
+
assert_nil a1.readline
|
444
|
+
assert_nil a2.readline
|
445
|
+
|
446
|
+
log.additive = false
|
447
|
+
log.error 'another error has occurred'
|
448
|
+
assert_equal "ERROR A Logger : another error has occurred\n", a2.readline
|
449
|
+
assert_nil a1.readline
|
450
|
+
assert_nil a2.readline
|
451
|
+
|
452
|
+
log.add_appenders a1
|
453
|
+
log.fatal 'fatal exception'
|
454
|
+
assert_equal "FATAL A Logger : fatal exception\n", a1.readline
|
455
|
+
assert_equal "FATAL A Logger : fatal exception\n", a2.readline
|
456
|
+
assert_nil a1.readline
|
457
|
+
assert_nil a2.readline
|
458
|
+
|
459
|
+
assert_equal false, log.debug
|
460
|
+
assert_equal true, log.info
|
461
|
+
assert_equal " INFO A Logger : <NilClass> nil\n", a1.readline
|
462
|
+
assert_equal " INFO A Logger : <NilClass> nil\n", a2.readline
|
463
|
+
assert_equal true, log.warn
|
464
|
+
assert_equal " WARN A Logger : <NilClass> nil\n", a1.readline
|
465
|
+
assert_equal " WARN A Logger : <NilClass> nil\n", a2.readline
|
466
|
+
assert_equal true, log.error
|
467
|
+
assert_equal "ERROR A Logger : <NilClass> nil\n", a1.readline
|
468
|
+
assert_equal "ERROR A Logger : <NilClass> nil\n", a2.readline
|
469
|
+
assert_equal true, log.fatal
|
470
|
+
assert_equal "FATAL A Logger : <NilClass> nil\n", a1.readline
|
471
|
+
assert_equal "FATAL A Logger : <NilClass> nil\n", a2.readline
|
472
|
+
|
473
|
+
log.level = :warn
|
474
|
+
assert_equal false, log.debug
|
475
|
+
assert_equal false, log.info
|
476
|
+
assert_equal true, log.warn
|
477
|
+
assert_equal " WARN A Logger : <NilClass> nil\n", a1.readline
|
478
|
+
assert_equal " WARN A Logger : <NilClass> nil\n", a2.readline
|
479
|
+
assert_equal true, log.error
|
480
|
+
assert_equal "ERROR A Logger : <NilClass> nil\n", a1.readline
|
481
|
+
assert_equal "ERROR A Logger : <NilClass> nil\n", a2.readline
|
482
|
+
assert_equal true, log.fatal
|
483
|
+
assert_equal "FATAL A Logger : <NilClass> nil\n", a1.readline
|
484
|
+
assert_equal "FATAL A Logger : <NilClass> nil\n", a2.readline
|
485
|
+
|
486
|
+
assert_raise(NoMethodError) {log.critical 'this log level does not exist'}
|
487
|
+
|
488
|
+
log.warn do
|
489
|
+
str = 'a string of data'
|
490
|
+
str
|
491
|
+
end
|
492
|
+
assert_equal " WARN A Logger : a string of data\n", a1.readline
|
493
|
+
assert_equal " WARN A Logger : a string of data\n", a2.readline
|
494
|
+
assert_nil a1.readline
|
495
|
+
assert_nil a2.readline
|
496
|
+
|
497
|
+
log.info do
|
498
|
+
rb_raise(RuntimeError, "this block should not be executed")
|
499
|
+
end
|
500
|
+
assert_nil a1.readline
|
501
|
+
assert_nil a2.readline
|
502
|
+
end
|
503
|
+
|
504
|
+
def test_log_eh
|
505
|
+
::Logging::Logger[:root].level = 'info'
|
506
|
+
log = ::Logging::Logger['A Logger']
|
507
|
+
|
508
|
+
assert_equal false, log.debug?
|
509
|
+
assert_equal true, log.info?
|
510
|
+
assert_equal true, log.warn?
|
511
|
+
assert_equal true, log.error?
|
512
|
+
assert_equal true, log.fatal?
|
513
|
+
|
514
|
+
log.level = :warn
|
515
|
+
assert_equal false, log.debug?
|
516
|
+
assert_equal false, log.info?
|
517
|
+
assert_equal true, log.warn?
|
518
|
+
assert_equal true, log.error?
|
519
|
+
assert_equal true, log.fatal?
|
520
|
+
|
521
|
+
assert_raise(NoMethodError) do
|
522
|
+
log.critical? 'this log level does not exist'
|
523
|
+
end
|
524
|
+
end
|
525
|
+
|
526
|
+
def test_name
|
527
|
+
root = ::Logging::Logger.new :root
|
528
|
+
log = ::Logging::Logger.new 'A'
|
529
|
+
|
530
|
+
assert_equal 'root', root.name
|
531
|
+
assert_equal 'A', log.name
|
532
|
+
end
|
533
|
+
|
534
|
+
def test_parent
|
535
|
+
logger = ::Logging::Logger
|
536
|
+
root = logger.new :root
|
537
|
+
|
538
|
+
assert_raise(NoMethodError) {root.parent}
|
539
|
+
|
540
|
+
assert_same root, logger['A'].parent
|
541
|
+
assert_same logger['A'], logger['A::B'].parent
|
542
|
+
assert_same logger['A::B'], logger['A::B::C::D'].parent
|
543
|
+
assert_same logger['A::B'], logger['A::B::C::E'].parent
|
544
|
+
assert_same logger['A::B'], logger['A::B::C::F'].parent
|
545
|
+
|
546
|
+
assert_same logger['A::B'], logger['A::B::C'].parent
|
547
|
+
assert_same logger['A::B::C'], logger['A::B::C::D'].parent
|
548
|
+
assert_same logger['A::B::C'], logger['A::B::C::E'].parent
|
549
|
+
assert_same logger['A::B::C'], logger['A::B::C::F'].parent
|
550
|
+
|
551
|
+
assert_same logger['A::B::C::E'], logger['A::B::C::E::G'].parent
|
552
|
+
end
|
553
|
+
|
554
|
+
def test_remove_appenders
|
555
|
+
log = ::Logging::Logger['X']
|
556
|
+
|
557
|
+
appenders = lambda {log.instance_variable_get :@appenders}
|
558
|
+
assert_equal [], appenders[]
|
559
|
+
|
560
|
+
a = ::Logging::Appender.new 'test_appender_1'
|
561
|
+
b = ::Logging::Appender.new 'test_appender_2'
|
562
|
+
c = ::Logging::Appender.new 'test_appender_3'
|
563
|
+
|
564
|
+
log.add_appenders a, b, c
|
565
|
+
assert_equal [a,b,c], appenders[]
|
566
|
+
|
567
|
+
assert_raise(ArgumentError) {log.remove_appenders Object.new}
|
568
|
+
assert_raise(ArgumentError) {log.remove_appenders 10}
|
569
|
+
|
570
|
+
log.remove_appenders b
|
571
|
+
assert_equal [a,c], appenders[]
|
572
|
+
|
573
|
+
log.remove_appenders 'test_appender_1'
|
574
|
+
assert_equal [c], appenders[]
|
575
|
+
|
576
|
+
log.remove_appenders c
|
577
|
+
assert_equal [], appenders[]
|
578
|
+
|
579
|
+
log.remove_appenders a, b, c
|
580
|
+
assert_equal [], appenders[]
|
581
|
+
|
582
|
+
log.add_appenders a, b, c
|
583
|
+
assert_equal [a,b,c], appenders[]
|
584
|
+
|
585
|
+
log.remove_appenders a, c
|
586
|
+
assert_equal [b], appenders[]
|
587
|
+
end
|
588
|
+
|
589
|
+
def test_spaceship
|
590
|
+
logs = %w(
|
591
|
+
A A::B A::B::C A::B::C::D A::B::C::E A::B::C::E::G A::B::C::F
|
592
|
+
).map {|x| ::Logging::Logger[x]}
|
593
|
+
logs.unshift ::Logging::Logger[:root]
|
594
|
+
|
595
|
+
logs.inject do |a,b|
|
596
|
+
assert_equal(-1, a <=> b, "'#{a.name}' <=> '#{b.name}'")
|
597
|
+
b
|
598
|
+
end
|
599
|
+
|
600
|
+
assert_equal 1, logs[1] <=> ::Logging::Logger[:root]
|
601
|
+
assert_raise(ArgumentError) {logs[1] <=> Object.new}
|
602
|
+
assert_raise(ArgumentError) {::Logging::Logger[:root] <=> 'string'}
|
603
|
+
end
|
604
|
+
|
605
|
+
def test_trace
|
606
|
+
log = ::Logging::Logger[:root]
|
607
|
+
assert_equal false, log.trace
|
608
|
+
|
609
|
+
log.trace = true
|
610
|
+
assert_equal true, log.trace
|
611
|
+
|
612
|
+
log = ::Logging::Logger['A']
|
613
|
+
assert_equal false, log.trace
|
614
|
+
|
615
|
+
log.trace = true
|
616
|
+
assert_equal true, log.trace
|
617
|
+
end
|
618
|
+
|
619
|
+
def test_trace_eq
|
620
|
+
log = ::Logging::Logger.new 'A'
|
621
|
+
assert_equal false, log.trace
|
622
|
+
|
623
|
+
log.trace = true
|
624
|
+
assert_equal true, log.trace
|
625
|
+
|
626
|
+
log.trace = false
|
627
|
+
assert_equal false, log.trace
|
628
|
+
|
629
|
+
log.trace = 'true'
|
630
|
+
assert_equal true, log.trace
|
631
|
+
|
632
|
+
log.trace = 'false'
|
633
|
+
assert_equal false, log.trace
|
634
|
+
|
635
|
+
log.trace = nil
|
636
|
+
assert_equal false, log.trace
|
637
|
+
|
638
|
+
assert_raise(ArgumentError) {log.trace = Object}
|
639
|
+
end
|
640
|
+
|
641
|
+
def test_dump_configuration
|
642
|
+
log_a = ::Logging::Logger['A-logger']
|
643
|
+
log_b = ::Logging::Logger['A-logger::B-logger']
|
644
|
+
log_c = ::Logging::Logger['A-logger::B-logger::C-logger']
|
645
|
+
log_d = ::Logging::Logger['A-logger::D-logger']
|
646
|
+
|
647
|
+
sio = StringIO.new
|
648
|
+
|
649
|
+
log_a._dump_configuration( sio )
|
650
|
+
assert_equal(
|
651
|
+
"A-logger ........................................ debug +A -T\n", sio.to_s)
|
652
|
+
|
653
|
+
log_b._dump_configuration( sio )
|
654
|
+
assert_equal(
|
655
|
+
"A-logger::B-logger .............................. debug +A -T\n", sio.to_s)
|
656
|
+
|
657
|
+
log_c._dump_configuration( sio )
|
658
|
+
assert_equal(
|
659
|
+
"A-logger::B-logger::C-logger .................... debug +A -T\n", sio.to_s)
|
660
|
+
|
661
|
+
log_d._dump_configuration( sio )
|
662
|
+
assert_equal(
|
663
|
+
"A-logger::D-logger .............................. debug +A -T\n", sio.to_s)
|
664
|
+
|
665
|
+
log_b.level = :warn
|
666
|
+
log_b.trace = true
|
667
|
+
log_b._dump_configuration( sio )
|
668
|
+
assert_equal(
|
669
|
+
"A-logger::B-logger .............................. *warn +A +T\n", sio.to_s)
|
670
|
+
|
671
|
+
log_c.additive = false
|
672
|
+
log_c._dump_configuration( sio )
|
673
|
+
assert_equal(
|
674
|
+
"A-logger::B-logger::C-logger .................... warn -A -T\n", sio.to_s)
|
675
|
+
|
676
|
+
# with an indent specified
|
677
|
+
log_a._dump_configuration( sio, 4 )
|
678
|
+
assert_equal(
|
679
|
+
" A-logger .................................... debug +A -T\n", sio.to_s)
|
680
|
+
|
681
|
+
log_b._dump_configuration( sio, 8 )
|
682
|
+
assert_equal(
|
683
|
+
" A-logger::B-logger ...................... *warn +A +T\n", sio.to_s)
|
684
|
+
|
685
|
+
log_c._dump_configuration( sio, 10 )
|
686
|
+
assert_equal(
|
687
|
+
" A-logger::B-logger::C-logger .......... warn -A -T\n", sio.to_s)
|
688
|
+
|
689
|
+
log_d._dump_configuration( sio, 22 )
|
690
|
+
assert_equal(
|
691
|
+
" A-logger::D-logger ........ debug +A -T\n", sio.to_s)
|
692
|
+
|
693
|
+
log_c.level = 0
|
694
|
+
log_c._dump_configuration( sio, 26 )
|
695
|
+
assert_equal(
|
696
|
+
" A-logger::B...::C-logger *debug -A -T\n", sio.to_s)
|
697
|
+
end
|
698
|
+
|
699
|
+
end # class TestLogger
|
700
|
+
|
701
|
+
class SioAppender < ::Logging::Appenders::IO
|
702
|
+
|
703
|
+
def initialize( name, opts = {} )
|
704
|
+
@sio = StringIO.new
|
705
|
+
super(name, @sio, opts)
|
706
|
+
begin readline rescue EOFError end
|
707
|
+
end
|
708
|
+
|
709
|
+
def readline
|
710
|
+
@pos ||= 0
|
711
|
+
@sio.seek @pos
|
712
|
+
begin
|
713
|
+
line = @sio.readline
|
714
|
+
@pos = @sio.tell
|
715
|
+
line
|
716
|
+
rescue EOFError
|
717
|
+
nil
|
718
|
+
end
|
719
|
+
end
|
720
|
+
|
721
|
+
end # class SioAppender
|
722
|
+
|
723
|
+
end # module TestLogging
|
724
|
+
|
725
|
+
class StringIO
|
726
|
+
def to_s
|
727
|
+
seek 0
|
728
|
+
str = read
|
729
|
+
seek 0
|
730
|
+
return str
|
731
|
+
end
|
732
|
+
end
|
733
|
+
|
734
|
+
# EOF
|