logging 0.1.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.
- data/README.txt +11 -0
- data/lib/logging.rb +129 -0
- data/lib/logging/appender.rb +205 -0
- data/lib/logging/appenders/console.rb +47 -0
- data/lib/logging/appenders/file.rb +45 -0
- data/lib/logging/appenders/io.rb +87 -0
- data/lib/logging/appenders/static_appender.rb +58 -0
- data/lib/logging/layout.rb +102 -0
- data/lib/logging/layouts/basic.rb +48 -0
- data/lib/logging/layouts/pattern.rb +320 -0
- data/lib/logging/log_event.rb +52 -0
- data/lib/logging/logger.rb +345 -0
- data/lib/logging/repository.rb +148 -0
- data/lib/logging/root_logger.rb +69 -0
- data/test/appenders/test_console.rb +40 -0
- data/test/appenders/test_file.rb +76 -0
- data/test/appenders/test_io.rb +113 -0
- data/test/benchmark.rb +80 -0
- data/test/layouts/test_basic.rb +46 -0
- data/test/layouts/test_pattern.rb +175 -0
- data/test/setup.rb +45 -0
- data/test/test_all.rb +5 -0
- data/test/test_appender.rb +136 -0
- data/test/test_layout.rb +85 -0
- data/test/test_log_event.rb +81 -0
- data/test/test_logger.rb +472 -0
- data/test/test_logging.rb +121 -0
- data/test/test_repository.rb +113 -0
- data/test/test_root_logger.rb +67 -0
- metadata +75 -0
data/test/setup.rb
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# $Id: setup.rb 12 2007-01-14 20:03:40Z tim_pease $
|
|
2
|
+
|
|
3
|
+
require 'test/unit'
|
|
4
|
+
|
|
5
|
+
begin
|
|
6
|
+
require 'logging'
|
|
7
|
+
rescue LoadError
|
|
8
|
+
require 'rubygems'
|
|
9
|
+
require 'logging'
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
begin
|
|
13
|
+
require 'turn'
|
|
14
|
+
rescue LoadError
|
|
15
|
+
require 'rubygems'
|
|
16
|
+
begin; require 'turn'; rescue LoadError; end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
module TestLogging
|
|
21
|
+
module LoggingTestCase
|
|
22
|
+
|
|
23
|
+
def setup
|
|
24
|
+
super
|
|
25
|
+
|
|
26
|
+
::Logging.module_eval do
|
|
27
|
+
::Logging::LEVELS.clear
|
|
28
|
+
::Logging::LNAMES.clear
|
|
29
|
+
remove_const :MAX_LEVEL_LENGTH if const_defined? :MAX_LEVEL_LENGTH
|
|
30
|
+
remove_const :OBJ_FORMAT if const_defined? :OBJ_FORMAT
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
::Logging::Repository.class_eval do
|
|
34
|
+
@__instance__ = nil
|
|
35
|
+
class << self
|
|
36
|
+
nonce = class << Singleton; self; end
|
|
37
|
+
define_method(:instance, nonce::FirstInstanceCall)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end # module LoggingTestCase
|
|
43
|
+
end # module TestLogging
|
|
44
|
+
|
|
45
|
+
# EOF
|
data/test/test_all.rb
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# $Id: test_appender.rb 15 2007-01-15 19:03:45Z tim_pease $
|
|
2
|
+
|
|
3
|
+
require 'test/setup.rb'
|
|
4
|
+
|
|
5
|
+
module TestLogging
|
|
6
|
+
|
|
7
|
+
class TestAppender < Test::Unit::TestCase
|
|
8
|
+
include LoggingTestCase
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
super
|
|
12
|
+
|
|
13
|
+
::Logging.define_levels %w(debug info warn error fatal)
|
|
14
|
+
@levels = ::Logging::LEVELS
|
|
15
|
+
@event = ::Logging::LogEvent.new('logger', @levels['debug'],
|
|
16
|
+
['message'], false)
|
|
17
|
+
@appender = ::Logging::Appender.new 'test_appender'
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_append
|
|
21
|
+
ary = []
|
|
22
|
+
@appender.instance_variable_set :@ary, ary
|
|
23
|
+
def @appender.write( str ) @ary << str end
|
|
24
|
+
|
|
25
|
+
assert_nothing_raised {@appender.append @event}
|
|
26
|
+
assert_equal "DEBUG logger : message\n", ary.pop
|
|
27
|
+
|
|
28
|
+
@appender.level = :info
|
|
29
|
+
@appender.append @event
|
|
30
|
+
assert_nil ary.pop
|
|
31
|
+
|
|
32
|
+
@event.level = @levels['info']
|
|
33
|
+
@appender.append @event
|
|
34
|
+
assert_equal " INFO logger : message\n", ary.pop
|
|
35
|
+
|
|
36
|
+
@appender.close
|
|
37
|
+
assert_raise(RuntimeError) {@appender.append @event}
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def test_close
|
|
41
|
+
assert_equal false, @appender.closed?
|
|
42
|
+
|
|
43
|
+
@appender.close
|
|
44
|
+
assert_equal true, @appender.closed?
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_closed_eh
|
|
48
|
+
assert_equal false, @appender.closed?
|
|
49
|
+
|
|
50
|
+
@appender.close
|
|
51
|
+
assert_equal true, @appender.closed?
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def test_concat
|
|
55
|
+
ary = []
|
|
56
|
+
@appender.instance_variable_set :@ary, ary
|
|
57
|
+
def @appender.write( str ) @ary << str end
|
|
58
|
+
|
|
59
|
+
assert_nothing_raised {@appender << 'log message'}
|
|
60
|
+
assert_equal 'log message', ary.pop
|
|
61
|
+
|
|
62
|
+
@appender.level = :off
|
|
63
|
+
@appender << 'another log message'
|
|
64
|
+
assert_equal 'another log message', ary.pop
|
|
65
|
+
|
|
66
|
+
layout = @appender.layout
|
|
67
|
+
def layout.footer() 'this is the footer' end
|
|
68
|
+
|
|
69
|
+
@appender.close
|
|
70
|
+
assert_raise(RuntimeError) {@appender << 'log message'}
|
|
71
|
+
assert_equal 'this is the footer', ary.pop
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_initialize
|
|
75
|
+
assert_raise(TypeError) {::Logging::Appender.new 'test', :layout => []}
|
|
76
|
+
|
|
77
|
+
layout = ::Logging::Layouts::Basic.new
|
|
78
|
+
@appender = ::Logging::Appender.new 'test', :layout => layout
|
|
79
|
+
assert_same layout, @appender.instance_variable_get(:@layout)
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def test_layout
|
|
83
|
+
assert_instance_of ::Logging::Layouts::Basic, @appender.layout
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
def test_layout_eq
|
|
87
|
+
layout = ::Logging::Layouts::Basic.new
|
|
88
|
+
assert_not_equal layout, @appender.layout
|
|
89
|
+
|
|
90
|
+
assert_raise(TypeError) {@appender.layout = Object.new}
|
|
91
|
+
assert_raise(TypeError) {@appender.layout = 'not a layout'}
|
|
92
|
+
|
|
93
|
+
@appender.layout = layout
|
|
94
|
+
assert_same layout, @appender.layout
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
def test_level
|
|
98
|
+
assert_equal 0, @appender.level
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
def test_level_eq
|
|
102
|
+
assert_equal 0, @appender.level
|
|
103
|
+
|
|
104
|
+
assert_raise(ArgumentError) {@appender.level = -1}
|
|
105
|
+
assert_raise(ArgumentError) {@appender.level = 6}
|
|
106
|
+
assert_raise(ArgumentError) {@appender.level = Object}
|
|
107
|
+
assert_raise(ArgumentError) {@appender.level = 'bob'}
|
|
108
|
+
assert_raise(ArgumentError) {@appender.level = :wtf}
|
|
109
|
+
|
|
110
|
+
@appender.level = 'INFO'
|
|
111
|
+
assert_equal 1, @appender.level
|
|
112
|
+
|
|
113
|
+
@appender.level = :warn
|
|
114
|
+
assert_equal 2, @appender.level
|
|
115
|
+
|
|
116
|
+
@appender.level = 'error'
|
|
117
|
+
assert_equal 3, @appender.level
|
|
118
|
+
|
|
119
|
+
@appender.level = 4
|
|
120
|
+
assert_equal 4, @appender.level
|
|
121
|
+
|
|
122
|
+
@appender.level = 'off'
|
|
123
|
+
assert_equal 5, @appender.level
|
|
124
|
+
|
|
125
|
+
@appender.level = :all
|
|
126
|
+
assert_equal 0, @appender.level
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def test_name
|
|
130
|
+
assert_equal 'test_appender', @appender.name
|
|
131
|
+
end
|
|
132
|
+
|
|
133
|
+
end # class TestAppender
|
|
134
|
+
end # module TestLogging
|
|
135
|
+
|
|
136
|
+
# EOF
|
data/test/test_layout.rb
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
# $Id: test_layout.rb 5 2007-01-09 23:02:57Z tim_pease $
|
|
2
|
+
|
|
3
|
+
require 'test/setup.rb'
|
|
4
|
+
|
|
5
|
+
module TestLogging
|
|
6
|
+
|
|
7
|
+
class TestLayout < Test::Unit::TestCase
|
|
8
|
+
include LoggingTestCase
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
super
|
|
12
|
+
@layout = ::Logging::Layout.new
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_header
|
|
16
|
+
assert_equal '', @layout.header
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def test_initialize
|
|
20
|
+
obj_format = lambda {|l| l.instance_variable_get :@obj_format}
|
|
21
|
+
|
|
22
|
+
assert_equal :string, obj_format[@layout]
|
|
23
|
+
|
|
24
|
+
@layout = ::Logging::Layout.new 'blah'
|
|
25
|
+
assert_equal :string, obj_format[@layout]
|
|
26
|
+
|
|
27
|
+
@layout = ::Logging::Layout.new :inspect
|
|
28
|
+
assert_equal :inspect, obj_format[@layout]
|
|
29
|
+
|
|
30
|
+
@layout = ::Logging::Layout.new :yaml
|
|
31
|
+
assert_equal :yaml, obj_format[@layout]
|
|
32
|
+
|
|
33
|
+
@layout = ::Logging::Layout.new
|
|
34
|
+
assert_equal :string, obj_format[@layout]
|
|
35
|
+
|
|
36
|
+
::Logging.format_as :yaml
|
|
37
|
+
@layout = ::Logging::Layout.new
|
|
38
|
+
assert_equal :yaml, obj_format[@layout]
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def test_footer
|
|
42
|
+
assert_equal '', @layout.footer
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def test_format
|
|
46
|
+
assert_nil @layout.format(::Logging::LogEvent.new('a','b','c',false))
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def test_format_obj
|
|
50
|
+
obj = 'test string'
|
|
51
|
+
r = @layout.send :format_obj, obj
|
|
52
|
+
assert_same obj, r
|
|
53
|
+
|
|
54
|
+
obj = RuntimeError.new
|
|
55
|
+
r = @layout.send :format_obj, obj
|
|
56
|
+
assert_equal '<RuntimeError> RuntimeError', r
|
|
57
|
+
|
|
58
|
+
obj = TypeError.new 'only works with Integers'
|
|
59
|
+
r = @layout.send :format_obj, obj
|
|
60
|
+
assert_equal '<TypeError> only works with Integers', r
|
|
61
|
+
|
|
62
|
+
obj = Exception.new 'some exception'
|
|
63
|
+
obj.set_backtrace %w( this is the backtrace )
|
|
64
|
+
r = @layout.send :format_obj, obj
|
|
65
|
+
obj = "<Exception> some exception\n\tthis\n\tis\n\tthe\n\tbacktrace"
|
|
66
|
+
assert_equal obj, r
|
|
67
|
+
|
|
68
|
+
obj = [1, 2, 3, 4]
|
|
69
|
+
r = @layout.send :format_obj, obj
|
|
70
|
+
assert_equal '<Array> 1234', r
|
|
71
|
+
|
|
72
|
+
obj = %w( one two three four )
|
|
73
|
+
@layout = ::Logging::Layout.new :inspect
|
|
74
|
+
r = @layout.send :format_obj, obj
|
|
75
|
+
assert_equal '<Array> ["one", "two", "three", "four"]', r
|
|
76
|
+
|
|
77
|
+
@layout = ::Logging::Layout.new :yaml
|
|
78
|
+
r = @layout.send :format_obj, obj
|
|
79
|
+
assert_equal "<Array> \n--- \n- one\n- two\n- three\n- four\n", r
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
end # class TestAppender
|
|
83
|
+
end # module TestLogging
|
|
84
|
+
|
|
85
|
+
# EOF
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# $Id: test_log_event.rb 9 2007-01-11 23:51:41Z tim_pease $
|
|
2
|
+
|
|
3
|
+
require 'test/setup.rb'
|
|
4
|
+
|
|
5
|
+
module TestLogging
|
|
6
|
+
|
|
7
|
+
class TestEvent < Test::Unit::TestCase
|
|
8
|
+
include LoggingTestCase
|
|
9
|
+
|
|
10
|
+
def setup
|
|
11
|
+
super
|
|
12
|
+
|
|
13
|
+
@appender = EventAppender.new('test')
|
|
14
|
+
@logger = ::Logging::Logger['TestLogger']
|
|
15
|
+
@logger.add @appender
|
|
16
|
+
|
|
17
|
+
@logger.info 'message 1', %w(a b c)
|
|
18
|
+
@event = @appender.event
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def test_data
|
|
22
|
+
assert_equal ['message 1', %w(a b c)], @event.data
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def test_data_eq
|
|
26
|
+
@event.data = ['message 2']
|
|
27
|
+
assert_equal ['message 2'], @event.data
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def test_file
|
|
31
|
+
assert_equal '', @event.file
|
|
32
|
+
|
|
33
|
+
@logger.trace = true
|
|
34
|
+
@logger.warn 'warning message'
|
|
35
|
+
assert_match %r/test_log_event.rb\z/, @appender.event.file
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def test_level
|
|
39
|
+
assert_equal 1, @event.level
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def test_level_eq
|
|
43
|
+
@event.level = 3
|
|
44
|
+
assert_equal 3, @event.level
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def test_line
|
|
48
|
+
assert_equal '', @event.file
|
|
49
|
+
|
|
50
|
+
@logger.trace = true
|
|
51
|
+
@logger.error 'error message'
|
|
52
|
+
assert_match %r/\d+/, @appender.event.line
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_logger
|
|
56
|
+
assert_equal 'TestLogger', @event.logger
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def test_logger_eq
|
|
60
|
+
@event.logger = 'MyLogger'
|
|
61
|
+
assert_equal 'MyLogger', @event.logger
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def test_method
|
|
65
|
+
assert_equal '', @event.file
|
|
66
|
+
|
|
67
|
+
@logger.trace = true
|
|
68
|
+
@logger.debug 'debug message'
|
|
69
|
+
assert_equal 'test_method', @appender.event.method
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end # class TestLogger
|
|
73
|
+
|
|
74
|
+
class EventAppender < ::Logging::Appender
|
|
75
|
+
attr_reader :event
|
|
76
|
+
def append( event ) @event = event end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end # module TestLogging
|
|
80
|
+
|
|
81
|
+
# EOF
|
data/test/test_logger.rb
ADDED
|
@@ -0,0 +1,472 @@
|
|
|
1
|
+
# $Id: test_logger.rb 15 2007-01-15 19:03:45Z tim_pease $
|
|
2
|
+
|
|
3
|
+
require 'test/setup.rb'
|
|
4
|
+
require 'stringio'
|
|
5
|
+
|
|
6
|
+
module TestLogging
|
|
7
|
+
|
|
8
|
+
class TestLogger < Test::Unit::TestCase
|
|
9
|
+
include LoggingTestCase
|
|
10
|
+
|
|
11
|
+
def setup
|
|
12
|
+
super
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def test_initialize
|
|
16
|
+
assert_raise(ArgumentError) {::Logging::Logger[:test]}
|
|
17
|
+
assert_nothing_raised {::Logging::Logger.new(Object)}
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_add
|
|
21
|
+
log = ::Logging::Logger.new 'A'
|
|
22
|
+
|
|
23
|
+
appenders = lambda {log.instance_variable_get :@appenders}
|
|
24
|
+
assert_equal [], appenders[]
|
|
25
|
+
|
|
26
|
+
assert_raise(TypeError) {log.add Object.new}
|
|
27
|
+
assert_raise(TypeError) {log.add 'not an appender'}
|
|
28
|
+
|
|
29
|
+
a = ::Logging::Appender.new 'test_appender_1'
|
|
30
|
+
b = ::Logging::Appender.new 'test_appender_2'
|
|
31
|
+
c = ::Logging::Appender.new 'test_appender_3'
|
|
32
|
+
|
|
33
|
+
log.add a
|
|
34
|
+
assert_equal [a], appenders[]
|
|
35
|
+
|
|
36
|
+
log.add a
|
|
37
|
+
assert_equal [a], appenders[]
|
|
38
|
+
|
|
39
|
+
log.add b
|
|
40
|
+
assert_equal [a,b], appenders[]
|
|
41
|
+
|
|
42
|
+
log.add c
|
|
43
|
+
assert_equal [a,b,c], appenders[]
|
|
44
|
+
|
|
45
|
+
log.add a, c
|
|
46
|
+
assert_equal [a,b,c], appenders[]
|
|
47
|
+
|
|
48
|
+
log.clear
|
|
49
|
+
assert_equal [], appenders[]
|
|
50
|
+
|
|
51
|
+
log.add a, c
|
|
52
|
+
assert_equal [a,c], appenders[]
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def test_additive
|
|
56
|
+
root = ::Logging::Logger.new :root
|
|
57
|
+
log = ::Logging::Logger.new 'A'
|
|
58
|
+
|
|
59
|
+
assert_raise(NoMethodError) {root.additive}
|
|
60
|
+
assert_equal true, log.additive
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def test_additive_eq
|
|
64
|
+
root = ::Logging::Logger.new :root
|
|
65
|
+
log = ::Logging::Logger.new 'A'
|
|
66
|
+
|
|
67
|
+
assert_raise(NoMethodError) {root.additive = false}
|
|
68
|
+
assert_equal true, log.additive
|
|
69
|
+
|
|
70
|
+
log.additive = false
|
|
71
|
+
assert_equal false, log.additive
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def test_appenders_eq
|
|
75
|
+
log = ::Logging::Logger.new '42'
|
|
76
|
+
|
|
77
|
+
appenders = lambda {log.instance_variable_get :@appenders}
|
|
78
|
+
assert_equal [], appenders[]
|
|
79
|
+
|
|
80
|
+
assert_raise(TypeError) {log.appenders = Object.new}
|
|
81
|
+
assert_raise(TypeError) {log.appenders = 'not an appender'}
|
|
82
|
+
|
|
83
|
+
a = ::Logging::Appender.new 'test_appender_1'
|
|
84
|
+
b = ::Logging::Appender.new 'test_appender_2'
|
|
85
|
+
c = ::Logging::Appender.new 'test_appender_3'
|
|
86
|
+
|
|
87
|
+
log.appenders = a, b, c
|
|
88
|
+
assert_equal [a, b, c], appenders[]
|
|
89
|
+
|
|
90
|
+
log.appenders = b
|
|
91
|
+
assert_equal [b], appenders[]
|
|
92
|
+
|
|
93
|
+
log.appenders = c, a, b
|
|
94
|
+
assert_equal [c,a,b], appenders[]
|
|
95
|
+
|
|
96
|
+
log.appenders = nil
|
|
97
|
+
assert_equal [], appenders[]
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def test_class_aref
|
|
101
|
+
root = ::Logging::Logger[:root]
|
|
102
|
+
assert_same root, ::Logging::Logger[:root]
|
|
103
|
+
|
|
104
|
+
a = []
|
|
105
|
+
assert_same ::Logging::Logger['Array'], ::Logging::Logger[Array]
|
|
106
|
+
assert_same ::Logging::Logger['Array'], ::Logging::Logger[a]
|
|
107
|
+
|
|
108
|
+
assert_not_same ::Logging::Logger['Array'], ::Logging::Logger[:root]
|
|
109
|
+
assert_not_same ::Logging::Logger['A'], ::Logging::Logger['A::B']
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def test_class_root
|
|
113
|
+
root = ::Logging::Logger[:root]
|
|
114
|
+
assert_same root, ::Logging::Logger.root
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
def test_clear
|
|
118
|
+
log = ::Logging::Logger.new 'Elliott'
|
|
119
|
+
|
|
120
|
+
appenders = lambda {log.instance_variable_get :@appenders}
|
|
121
|
+
assert_equal [], appenders[]
|
|
122
|
+
|
|
123
|
+
a = ::Logging::Appender.new 'test_appender_1'
|
|
124
|
+
b = ::Logging::Appender.new 'test_appender_2'
|
|
125
|
+
c = ::Logging::Appender.new 'test_appender_3'
|
|
126
|
+
|
|
127
|
+
log.add a, b, c
|
|
128
|
+
assert_equal [a,b,c], appenders[]
|
|
129
|
+
|
|
130
|
+
log.clear
|
|
131
|
+
assert_equal [], appenders[]
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def test_concat
|
|
135
|
+
a1 = SioAppender.new 'a1'
|
|
136
|
+
a2 = SioAppender.new 'a2'
|
|
137
|
+
log = ::Logging::Logger.new 'A'
|
|
138
|
+
|
|
139
|
+
::Logging::Logger[:root].add a1
|
|
140
|
+
assert_nil a1.readline
|
|
141
|
+
assert_nil a2.readline
|
|
142
|
+
|
|
143
|
+
log << "this is line one of the log file\n"
|
|
144
|
+
assert_equal "this is line one of the log file\n", a1.readline
|
|
145
|
+
assert_nil a1.readline
|
|
146
|
+
assert_nil a2.readline
|
|
147
|
+
|
|
148
|
+
log << "this is line two of the log file\n"
|
|
149
|
+
log << "this is line three of the log file\n"
|
|
150
|
+
assert_equal "this is line two of the log file\n", a1.readline
|
|
151
|
+
assert_equal "this is line three of the log file\n", a1.readline
|
|
152
|
+
assert_nil a1.readline
|
|
153
|
+
assert_nil a2.readline
|
|
154
|
+
|
|
155
|
+
log.add a2
|
|
156
|
+
log << "this is line four of the log file\n"
|
|
157
|
+
assert_equal "this is line four of the log file\n", a1.readline
|
|
158
|
+
assert_equal "this is line four of the log file\n", a2.readline
|
|
159
|
+
assert_nil a1.readline
|
|
160
|
+
assert_nil a2.readline
|
|
161
|
+
|
|
162
|
+
log.additive = false
|
|
163
|
+
log << "this is line five of the log file\n"
|
|
164
|
+
assert_equal "this is line five of the log file\n", a2.readline
|
|
165
|
+
assert_nil a1.readline
|
|
166
|
+
assert_nil a2.readline
|
|
167
|
+
|
|
168
|
+
log.add a1
|
|
169
|
+
log << "this is line six of the log file\n"
|
|
170
|
+
assert_equal "this is line six of the log file\n", a1.readline
|
|
171
|
+
assert_equal "this is line six of the log file\n", a2.readline
|
|
172
|
+
assert_nil a1.readline
|
|
173
|
+
assert_nil a2.readline
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def test_level
|
|
177
|
+
root = ::Logging::Logger.new :root
|
|
178
|
+
log = ::Logging::Logger.new 'A'
|
|
179
|
+
|
|
180
|
+
assert_equal 0, root.level
|
|
181
|
+
assert_equal 0, log.level
|
|
182
|
+
|
|
183
|
+
root.level = :warn
|
|
184
|
+
assert_equal 2, root.level
|
|
185
|
+
assert_equal 0, log.level
|
|
186
|
+
|
|
187
|
+
log.level = nil
|
|
188
|
+
assert_equal 2, root.level
|
|
189
|
+
assert_equal 2, log.level
|
|
190
|
+
|
|
191
|
+
log.level = :error
|
|
192
|
+
assert_equal 2, root.level
|
|
193
|
+
assert_equal 3, log.level
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
def test_level_eq
|
|
197
|
+
root = ::Logging::Logger.new :root
|
|
198
|
+
log = ::Logging::Logger.new 'A'
|
|
199
|
+
|
|
200
|
+
assert_equal 0, root.level
|
|
201
|
+
assert_equal 0, log.level
|
|
202
|
+
|
|
203
|
+
assert_raise(ArgumentError) {root.level = -1}
|
|
204
|
+
assert_raise(ArgumentError) {root.level = 6}
|
|
205
|
+
assert_raise(ArgumentError) {root.level = Object}
|
|
206
|
+
assert_raise(ArgumentError) {root.level = 'bob'}
|
|
207
|
+
assert_raise(ArgumentError) {root.level = :wtf}
|
|
208
|
+
|
|
209
|
+
root.level = 'INFO'
|
|
210
|
+
assert_equal 1, root.level
|
|
211
|
+
assert_equal 0, log.level
|
|
212
|
+
|
|
213
|
+
root.level = :warn
|
|
214
|
+
assert_equal 2, root.level
|
|
215
|
+
assert_equal 0, log.level
|
|
216
|
+
|
|
217
|
+
root.level = 'error'
|
|
218
|
+
assert_equal 3, root.level
|
|
219
|
+
assert_equal 0, log.level
|
|
220
|
+
|
|
221
|
+
root.level = 4
|
|
222
|
+
assert_equal 4, root.level
|
|
223
|
+
assert_equal 0, log.level
|
|
224
|
+
|
|
225
|
+
log.level = nil
|
|
226
|
+
assert_equal 4, root.level
|
|
227
|
+
assert_equal 4, log.level
|
|
228
|
+
|
|
229
|
+
log.level = :DEBUG
|
|
230
|
+
assert_equal 4, root.level
|
|
231
|
+
assert_equal 0, log.level
|
|
232
|
+
|
|
233
|
+
log.level = :off
|
|
234
|
+
assert_equal 4, root.level
|
|
235
|
+
assert_equal 5, log.level
|
|
236
|
+
|
|
237
|
+
root.level = :all
|
|
238
|
+
assert_equal 0, root.level
|
|
239
|
+
assert_equal 5, log.level
|
|
240
|
+
|
|
241
|
+
log.level = nil
|
|
242
|
+
assert_equal 0, root.level
|
|
243
|
+
assert_equal 0, log.level
|
|
244
|
+
|
|
245
|
+
root.level = :warn
|
|
246
|
+
assert_equal 2, root.level
|
|
247
|
+
assert_equal 0, log.level
|
|
248
|
+
|
|
249
|
+
root.level = nil
|
|
250
|
+
assert_equal 0, root.level
|
|
251
|
+
assert_equal 0, log.level
|
|
252
|
+
end
|
|
253
|
+
|
|
254
|
+
def test_log
|
|
255
|
+
root = ::Logging::Logger[:root]
|
|
256
|
+
root.level = 'info'
|
|
257
|
+
|
|
258
|
+
a1 = SioAppender.new 'a1'
|
|
259
|
+
a2 = SioAppender.new 'a2'
|
|
260
|
+
log = ::Logging::Logger.new 'A Logger'
|
|
261
|
+
|
|
262
|
+
root.add a1
|
|
263
|
+
assert_nil a1.readline
|
|
264
|
+
assert_nil a2.readline
|
|
265
|
+
|
|
266
|
+
log.debug 'this should NOT be logged'
|
|
267
|
+
assert_nil a1.readline
|
|
268
|
+
assert_nil a2.readline
|
|
269
|
+
|
|
270
|
+
log.info 'this should be logged'
|
|
271
|
+
assert_equal " INFO A Logger : this should be logged\n", a1.readline
|
|
272
|
+
assert_nil a1.readline
|
|
273
|
+
assert_nil a2.readline
|
|
274
|
+
|
|
275
|
+
log.warn 'this is a warning', [1,2,3,4]
|
|
276
|
+
assert_equal " WARN A Logger : this is a warning\n", a1.readline
|
|
277
|
+
assert_equal " WARN A Logger : <Array> 1234\n", a1.readline
|
|
278
|
+
assert_nil a1.readline
|
|
279
|
+
assert_nil a2.readline
|
|
280
|
+
|
|
281
|
+
log.add a2
|
|
282
|
+
log.error 'an error has occurred'
|
|
283
|
+
assert_equal "ERROR A Logger : an error has occurred\n", a1.readline
|
|
284
|
+
assert_equal "ERROR A Logger : an error has occurred\n", a2.readline
|
|
285
|
+
assert_nil a1.readline
|
|
286
|
+
assert_nil a2.readline
|
|
287
|
+
|
|
288
|
+
log.additive = false
|
|
289
|
+
log.error 'another error has occurred'
|
|
290
|
+
assert_equal "ERROR A Logger : another error has occurred\n", a2.readline
|
|
291
|
+
assert_nil a1.readline
|
|
292
|
+
assert_nil a2.readline
|
|
293
|
+
|
|
294
|
+
log.add a1
|
|
295
|
+
log.fatal 'fatal exception'
|
|
296
|
+
assert_equal "FATAL A Logger : fatal exception\n", a1.readline
|
|
297
|
+
assert_equal "FATAL A Logger : fatal exception\n", a2.readline
|
|
298
|
+
assert_nil a1.readline
|
|
299
|
+
assert_nil a2.readline
|
|
300
|
+
|
|
301
|
+
assert_equal false, log.debug
|
|
302
|
+
assert_equal true, log.info
|
|
303
|
+
assert_equal true, log.warn
|
|
304
|
+
assert_equal true, log.error
|
|
305
|
+
assert_equal true, log.fatal
|
|
306
|
+
|
|
307
|
+
log.level = :warn
|
|
308
|
+
assert_equal false, log.debug
|
|
309
|
+
assert_equal false, log.info
|
|
310
|
+
assert_equal true, log.warn
|
|
311
|
+
assert_equal true, log.error
|
|
312
|
+
assert_equal true, log.fatal
|
|
313
|
+
|
|
314
|
+
assert_raise(NoMethodError) {log.critical 'this log level does not exist'}
|
|
315
|
+
|
|
316
|
+
log.warn do
|
|
317
|
+
str = 'a string of data'
|
|
318
|
+
str
|
|
319
|
+
end
|
|
320
|
+
assert_equal " WARN A Logger : a string of data\n", a1.readline
|
|
321
|
+
assert_equal " WARN A Logger : a string of data\n", a2.readline
|
|
322
|
+
assert_nil a1.readline
|
|
323
|
+
assert_nil a2.readline
|
|
324
|
+
|
|
325
|
+
log.info do
|
|
326
|
+
rb_raise(RuntimeError, "this block should not be executed")
|
|
327
|
+
end
|
|
328
|
+
assert_nil a1.readline
|
|
329
|
+
assert_nil a2.readline
|
|
330
|
+
end
|
|
331
|
+
|
|
332
|
+
def test_log_eh
|
|
333
|
+
::Logging::Logger[:root].level = 'info'
|
|
334
|
+
log = ::Logging::Logger['A Logger']
|
|
335
|
+
|
|
336
|
+
assert_equal false, log.debug?
|
|
337
|
+
assert_equal true, log.info?
|
|
338
|
+
assert_equal true, log.warn?
|
|
339
|
+
assert_equal true, log.error?
|
|
340
|
+
assert_equal true, log.fatal?
|
|
341
|
+
|
|
342
|
+
log.level = :warn
|
|
343
|
+
assert_equal false, log.debug?
|
|
344
|
+
assert_equal false, log.info?
|
|
345
|
+
assert_equal true, log.warn?
|
|
346
|
+
assert_equal true, log.error?
|
|
347
|
+
assert_equal true, log.fatal?
|
|
348
|
+
|
|
349
|
+
assert_raise(NoMethodError) do
|
|
350
|
+
log.critical? 'this log level does not exist'
|
|
351
|
+
end
|
|
352
|
+
end
|
|
353
|
+
|
|
354
|
+
def test_name
|
|
355
|
+
root = ::Logging::Logger.new :root
|
|
356
|
+
log = ::Logging::Logger.new 'A'
|
|
357
|
+
|
|
358
|
+
assert_equal 'root', root.name
|
|
359
|
+
assert_equal 'A', log.name
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
def test_parent
|
|
363
|
+
logger = ::Logging::Logger
|
|
364
|
+
root = logger.new :root
|
|
365
|
+
|
|
366
|
+
assert_raise(NoMethodError) {root.parent}
|
|
367
|
+
|
|
368
|
+
assert_same root, logger['A'].parent
|
|
369
|
+
assert_same logger['A'], logger['A::B'].parent
|
|
370
|
+
assert_same logger['A::B'], logger['A::B::C::D'].parent
|
|
371
|
+
assert_same logger['A::B'], logger['A::B::C::E'].parent
|
|
372
|
+
assert_same logger['A::B'], logger['A::B::C::F'].parent
|
|
373
|
+
|
|
374
|
+
assert_same logger['A::B'], logger['A::B::C'].parent
|
|
375
|
+
assert_same logger['A::B::C'], logger['A::B::C::D'].parent
|
|
376
|
+
assert_same logger['A::B::C'], logger['A::B::C::E'].parent
|
|
377
|
+
assert_same logger['A::B::C'], logger['A::B::C::F'].parent
|
|
378
|
+
|
|
379
|
+
assert_same logger['A::B::C::E'], logger['A::B::C::E::G'].parent
|
|
380
|
+
end
|
|
381
|
+
|
|
382
|
+
def test_remove
|
|
383
|
+
log = ::Logging::Logger['X']
|
|
384
|
+
|
|
385
|
+
appenders = lambda {log.instance_variable_get :@appenders}
|
|
386
|
+
assert_equal [], appenders[]
|
|
387
|
+
|
|
388
|
+
a = ::Logging::Appender.new 'test_appender_1'
|
|
389
|
+
b = ::Logging::Appender.new 'test_appender_2'
|
|
390
|
+
c = ::Logging::Appender.new 'test_appender_3'
|
|
391
|
+
|
|
392
|
+
log.add a, b, c
|
|
393
|
+
assert_equal [a,b,c], appenders[]
|
|
394
|
+
|
|
395
|
+
assert_raise(TypeError) {log.remove Object.new}
|
|
396
|
+
assert_raise(TypeError) {log.remove 10}
|
|
397
|
+
|
|
398
|
+
log.remove b
|
|
399
|
+
assert_equal [a,c], appenders[]
|
|
400
|
+
|
|
401
|
+
log.remove 'test_appender_1'
|
|
402
|
+
assert_equal [c], appenders[]
|
|
403
|
+
|
|
404
|
+
log.remove c
|
|
405
|
+
assert_equal [], appenders[]
|
|
406
|
+
|
|
407
|
+
log.remove a, b, c
|
|
408
|
+
assert_equal [], appenders[]
|
|
409
|
+
|
|
410
|
+
log.add a, b, c
|
|
411
|
+
assert_equal [a,b,c], appenders[]
|
|
412
|
+
|
|
413
|
+
log.remove a, c
|
|
414
|
+
assert_equal [b], appenders[]
|
|
415
|
+
end
|
|
416
|
+
|
|
417
|
+
def test_spaceship
|
|
418
|
+
logs = %w(
|
|
419
|
+
A A::B A::B::C A::B::C::D A::B::C::E A::B::C::E::G A::B::C::F
|
|
420
|
+
).map {|x| ::Logging::Logger[x]}
|
|
421
|
+
logs.unshift ::Logging::Logger[:root]
|
|
422
|
+
|
|
423
|
+
logs.inject do |a,b|
|
|
424
|
+
assert_equal(-1, a <=> b, "'#{a.name}' <=> '#{b.name}'")
|
|
425
|
+
b
|
|
426
|
+
end
|
|
427
|
+
|
|
428
|
+
assert_equal 1, logs[1] <=> ::Logging::Logger[:root]
|
|
429
|
+
assert_raise(ArgumentError) {logs[1] <=> Object.new}
|
|
430
|
+
assert_raise(ArgumentError) {::Logging::Logger[:root] <=> 'string'}
|
|
431
|
+
end
|
|
432
|
+
|
|
433
|
+
def test_trace
|
|
434
|
+
log = ::Logging::Logger[:root]
|
|
435
|
+
assert_equal false, log.trace
|
|
436
|
+
|
|
437
|
+
log.trace = true
|
|
438
|
+
assert_equal true, log.trace
|
|
439
|
+
|
|
440
|
+
log = ::Logging::Logger['A']
|
|
441
|
+
assert_equal false, log.trace
|
|
442
|
+
|
|
443
|
+
log.trace = true
|
|
444
|
+
assert_equal true, log.trace
|
|
445
|
+
end
|
|
446
|
+
|
|
447
|
+
end # class TestLogger
|
|
448
|
+
|
|
449
|
+
class SioAppender < ::Logging::Appenders::IO
|
|
450
|
+
|
|
451
|
+
def initialize( name, opts = {} )
|
|
452
|
+
@sio = StringIO.new
|
|
453
|
+
super(name, @sio, opts)
|
|
454
|
+
begin readline rescue EOFError end
|
|
455
|
+
end
|
|
456
|
+
|
|
457
|
+
def readline
|
|
458
|
+
@pos ||= 0
|
|
459
|
+
@sio.seek @pos
|
|
460
|
+
begin
|
|
461
|
+
line = @sio.readline
|
|
462
|
+
@pos = @sio.tell
|
|
463
|
+
line
|
|
464
|
+
rescue EOFError
|
|
465
|
+
nil
|
|
466
|
+
end
|
|
467
|
+
end
|
|
468
|
+
|
|
469
|
+
end # class SioAppender
|
|
470
|
+
end # module TestLogging
|
|
471
|
+
|
|
472
|
+
# EOF
|