filterfish-logging 0.9.8
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 +176 -0
- data/Manifest.txt +54 -0
- data/README.txt +93 -0
- data/Rakefile +28 -0
- data/data/logging.yaml +63 -0
- data/lib/logging.rb +288 -0
- data/lib/logging/appender.rb +257 -0
- data/lib/logging/appenders/console.rb +43 -0
- data/lib/logging/appenders/email.rb +131 -0
- data/lib/logging/appenders/file.rb +55 -0
- data/lib/logging/appenders/growl.rb +182 -0
- data/lib/logging/appenders/io.rb +81 -0
- data/lib/logging/appenders/rolling_file.rb +293 -0
- data/lib/logging/appenders/syslog.rb +202 -0
- data/lib/logging/config/yaml_configurator.rb +197 -0
- data/lib/logging/layout.rb +103 -0
- data/lib/logging/layouts/basic.rb +35 -0
- data/lib/logging/layouts/pattern.rb +292 -0
- data/lib/logging/log_event.rb +50 -0
- data/lib/logging/logger.rb +388 -0
- data/lib/logging/repository.rb +151 -0
- data/lib/logging/root_logger.rb +60 -0
- data/lib/logging/utils.rb +44 -0
- data/tasks/ann.rake +78 -0
- data/tasks/bones.rake +21 -0
- data/tasks/gem.rake +106 -0
- data/tasks/manifest.rake +49 -0
- data/tasks/notes.rake +22 -0
- data/tasks/post_load.rake +37 -0
- data/tasks/rdoc.rake +49 -0
- data/tasks/rubyforge.rake +57 -0
- data/tasks/setup.rb +253 -0
- data/tasks/svn.rake +45 -0
- data/tasks/test.rake +38 -0
- data/test/appenders/test_console.rb +40 -0
- data/test/appenders/test_email.rb +167 -0
- data/test/appenders/test_file.rb +94 -0
- data/test/appenders/test_growl.rb +115 -0
- data/test/appenders/test_io.rb +113 -0
- data/test/appenders/test_rolling_file.rb +187 -0
- data/test/appenders/test_syslog.rb +192 -0
- data/test/benchmark.rb +88 -0
- data/test/config/test_yaml_configurator.rb +41 -0
- data/test/layouts/test_basic.rb +44 -0
- data/test/layouts/test_pattern.rb +173 -0
- data/test/setup.rb +66 -0
- data/test/test_appender.rb +162 -0
- data/test/test_layout.rb +85 -0
- data/test/test_log_event.rb +81 -0
- data/test/test_logger.rb +589 -0
- data/test/test_logging.rb +250 -0
- data/test/test_repository.rb +123 -0
- data/test/test_root_logger.rb +82 -0
- data/test/test_utils.rb +48 -0
- metadata +126 -0
data/test/test_layout.rb
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
# $Id$
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), %w[setup])
|
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 'format_as' => 'blah'
|
25
|
+
assert_equal :string, obj_format[@layout]
|
26
|
+
|
27
|
+
@layout = ::Logging::Layout.new :format_as => :inspect
|
28
|
+
assert_equal :inspect, obj_format[@layout]
|
29
|
+
|
30
|
+
@layout = ::Logging::Layout.new 'format_as' => :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> #{[1,2,3,4]}", r
|
71
|
+
|
72
|
+
obj = %w( one two three four )
|
73
|
+
@layout = ::Logging::Layout.new :format_as => :inspect
|
74
|
+
r = @layout.send :format_obj, obj
|
75
|
+
assert_equal '<Array> ["one", "two", "three", "four"]', r
|
76
|
+
|
77
|
+
@layout = ::Logging::Layout.new :format_as => :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 TestLayout
|
83
|
+
end # module TestLogging
|
84
|
+
|
85
|
+
# EOF
|
@@ -0,0 +1,81 @@
|
|
1
|
+
# $Id$
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), %w[setup])
|
4
|
+
|
5
|
+
module TestLogging
|
6
|
+
|
7
|
+
class TestLogEvent < 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_appenders @appender
|
16
|
+
|
17
|
+
@logger.info 'message 1'
|
18
|
+
@event = @appender.event
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_data
|
22
|
+
assert_equal 'message 1', @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 TestLogEvent
|
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,589 @@
|
|
1
|
+
# $Id$
|
2
|
+
|
3
|
+
require File.join(File.dirname(__FILE__), %w[setup])
|
4
|
+
|
5
|
+
module TestLogging
|
6
|
+
|
7
|
+
class TestLogger < Test::Unit::TestCase
|
8
|
+
include LoggingTestCase
|
9
|
+
|
10
|
+
def setup
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_initialize
|
15
|
+
assert_raise(ArgumentError) {::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_level
|
259
|
+
root = ::Logging::Logger.new :root
|
260
|
+
log = ::Logging::Logger.new 'A'
|
261
|
+
|
262
|
+
assert_equal 0, root.level
|
263
|
+
assert_equal 0, log.level
|
264
|
+
|
265
|
+
root.level = :warn
|
266
|
+
assert_equal 2, root.level
|
267
|
+
assert_equal 0, log.level
|
268
|
+
|
269
|
+
log.level = nil
|
270
|
+
assert_equal 2, root.level
|
271
|
+
assert_equal 2, log.level
|
272
|
+
|
273
|
+
log.level = :error
|
274
|
+
assert_equal 2, root.level
|
275
|
+
assert_equal 3, log.level
|
276
|
+
end
|
277
|
+
|
278
|
+
def test_level_eq
|
279
|
+
root = ::Logging::Logger.new :root
|
280
|
+
log = ::Logging::Logger.new 'A'
|
281
|
+
|
282
|
+
assert_equal 0, root.level
|
283
|
+
assert_equal 0, log.level
|
284
|
+
|
285
|
+
assert_raise(ArgumentError) {root.level = -1}
|
286
|
+
assert_raise(ArgumentError) {root.level = 6}
|
287
|
+
assert_raise(ArgumentError) {root.level = Object}
|
288
|
+
assert_raise(ArgumentError) {root.level = 'bob'}
|
289
|
+
assert_raise(ArgumentError) {root.level = :wtf}
|
290
|
+
|
291
|
+
root.level = 'INFO'
|
292
|
+
assert_equal 1, root.level
|
293
|
+
assert_equal 0, log.level
|
294
|
+
|
295
|
+
root.level = :warn
|
296
|
+
assert_equal 2, root.level
|
297
|
+
assert_equal 0, log.level
|
298
|
+
|
299
|
+
root.level = 'error'
|
300
|
+
assert_equal 3, root.level
|
301
|
+
assert_equal 0, log.level
|
302
|
+
|
303
|
+
root.level = 4
|
304
|
+
assert_equal 4, root.level
|
305
|
+
assert_equal 0, log.level
|
306
|
+
|
307
|
+
log.level = nil
|
308
|
+
assert_equal 4, root.level
|
309
|
+
assert_equal 4, log.level
|
310
|
+
|
311
|
+
log.level = :DEBUG
|
312
|
+
assert_equal 4, root.level
|
313
|
+
assert_equal 0, log.level
|
314
|
+
|
315
|
+
log.level = :off
|
316
|
+
assert_equal 4, root.level
|
317
|
+
assert_equal 5, log.level
|
318
|
+
|
319
|
+
root.level = :all
|
320
|
+
assert_equal 0, root.level
|
321
|
+
assert_equal 5, log.level
|
322
|
+
|
323
|
+
log.level = nil
|
324
|
+
assert_equal 0, root.level
|
325
|
+
assert_equal 0, log.level
|
326
|
+
|
327
|
+
root.level = :warn
|
328
|
+
assert_equal 2, root.level
|
329
|
+
assert_equal 0, log.level
|
330
|
+
|
331
|
+
root.level = nil
|
332
|
+
assert_equal 0, root.level
|
333
|
+
assert_equal 0, log.level
|
334
|
+
end
|
335
|
+
|
336
|
+
def test_log
|
337
|
+
root = ::Logging::Logger[:root]
|
338
|
+
root.level = 'info'
|
339
|
+
|
340
|
+
a1 = SioAppender.new 'a1'
|
341
|
+
a2 = SioAppender.new 'a2'
|
342
|
+
log = ::Logging::Logger.new 'A Logger'
|
343
|
+
|
344
|
+
root.add_appenders a1
|
345
|
+
assert_nil a1.readline
|
346
|
+
assert_nil a2.readline
|
347
|
+
|
348
|
+
log.debug 'this should NOT be logged'
|
349
|
+
assert_nil a1.readline
|
350
|
+
assert_nil a2.readline
|
351
|
+
|
352
|
+
log.info 'this should be logged'
|
353
|
+
assert_equal " INFO A Logger : this should be logged\n", a1.readline
|
354
|
+
assert_nil a1.readline
|
355
|
+
assert_nil a2.readline
|
356
|
+
|
357
|
+
log.warn [1,2,3,4]
|
358
|
+
assert_equal " WARN A Logger : <Array> #{[1,2,3,4]}\n", a1.readline
|
359
|
+
assert_nil a1.readline
|
360
|
+
assert_nil a2.readline
|
361
|
+
|
362
|
+
log.add_appenders a2
|
363
|
+
log.error 'an error has occurred'
|
364
|
+
assert_equal "ERROR A Logger : an error has occurred\n", a1.readline
|
365
|
+
assert_equal "ERROR A Logger : an error has occurred\n", a2.readline
|
366
|
+
assert_nil a1.readline
|
367
|
+
assert_nil a2.readline
|
368
|
+
|
369
|
+
log.additive = false
|
370
|
+
log.error 'another error has occurred'
|
371
|
+
assert_equal "ERROR A Logger : another error has occurred\n", a2.readline
|
372
|
+
assert_nil a1.readline
|
373
|
+
assert_nil a2.readline
|
374
|
+
|
375
|
+
log.add_appenders a1
|
376
|
+
log.fatal 'fatal exception'
|
377
|
+
assert_equal "FATAL A Logger : fatal exception\n", a1.readline
|
378
|
+
assert_equal "FATAL A Logger : fatal exception\n", a2.readline
|
379
|
+
assert_nil a1.readline
|
380
|
+
assert_nil a2.readline
|
381
|
+
|
382
|
+
assert_equal false, log.debug
|
383
|
+
assert_equal true, log.info
|
384
|
+
assert_equal " INFO A Logger : <NilClass> nil\n", a1.readline
|
385
|
+
assert_equal " INFO A Logger : <NilClass> nil\n", a2.readline
|
386
|
+
assert_equal true, log.warn
|
387
|
+
assert_equal " WARN A Logger : <NilClass> nil\n", a1.readline
|
388
|
+
assert_equal " WARN A Logger : <NilClass> nil\n", a2.readline
|
389
|
+
assert_equal true, log.error
|
390
|
+
assert_equal "ERROR A Logger : <NilClass> nil\n", a1.readline
|
391
|
+
assert_equal "ERROR A Logger : <NilClass> nil\n", a2.readline
|
392
|
+
assert_equal true, log.fatal
|
393
|
+
assert_equal "FATAL A Logger : <NilClass> nil\n", a1.readline
|
394
|
+
assert_equal "FATAL A Logger : <NilClass> nil\n", a2.readline
|
395
|
+
|
396
|
+
log.level = :warn
|
397
|
+
assert_equal false, log.debug
|
398
|
+
assert_equal false, log.info
|
399
|
+
assert_equal true, log.warn
|
400
|
+
assert_equal " WARN A Logger : <NilClass> nil\n", a1.readline
|
401
|
+
assert_equal " WARN A Logger : <NilClass> nil\n", a2.readline
|
402
|
+
assert_equal true, log.error
|
403
|
+
assert_equal "ERROR A Logger : <NilClass> nil\n", a1.readline
|
404
|
+
assert_equal "ERROR A Logger : <NilClass> nil\n", a2.readline
|
405
|
+
assert_equal true, log.fatal
|
406
|
+
assert_equal "FATAL A Logger : <NilClass> nil\n", a1.readline
|
407
|
+
assert_equal "FATAL A Logger : <NilClass> nil\n", a2.readline
|
408
|
+
|
409
|
+
assert_raise(NoMethodError) {log.critical 'this log level does not exist'}
|
410
|
+
|
411
|
+
log.warn do
|
412
|
+
str = 'a string of data'
|
413
|
+
str
|
414
|
+
end
|
415
|
+
assert_equal " WARN A Logger : a string of data\n", a1.readline
|
416
|
+
assert_equal " WARN A Logger : a string of data\n", a2.readline
|
417
|
+
assert_nil a1.readline
|
418
|
+
assert_nil a2.readline
|
419
|
+
|
420
|
+
log.info do
|
421
|
+
rb_raise(RuntimeError, "this block should not be executed")
|
422
|
+
end
|
423
|
+
assert_nil a1.readline
|
424
|
+
assert_nil a2.readline
|
425
|
+
end
|
426
|
+
|
427
|
+
def test_log_eh
|
428
|
+
::Logging::Logger[:root].level = 'info'
|
429
|
+
log = ::Logging::Logger['A Logger']
|
430
|
+
|
431
|
+
assert_equal false, log.debug?
|
432
|
+
assert_equal true, log.info?
|
433
|
+
assert_equal true, log.warn?
|
434
|
+
assert_equal true, log.error?
|
435
|
+
assert_equal true, log.fatal?
|
436
|
+
|
437
|
+
log.level = :warn
|
438
|
+
assert_equal false, log.debug?
|
439
|
+
assert_equal false, log.info?
|
440
|
+
assert_equal true, log.warn?
|
441
|
+
assert_equal true, log.error?
|
442
|
+
assert_equal true, log.fatal?
|
443
|
+
|
444
|
+
assert_raise(NoMethodError) do
|
445
|
+
log.critical? 'this log level does not exist'
|
446
|
+
end
|
447
|
+
end
|
448
|
+
|
449
|
+
def test_name
|
450
|
+
root = ::Logging::Logger.new :root
|
451
|
+
log = ::Logging::Logger.new 'A'
|
452
|
+
|
453
|
+
assert_equal 'root', root.name
|
454
|
+
assert_equal 'A', log.name
|
455
|
+
end
|
456
|
+
|
457
|
+
def test_parent
|
458
|
+
logger = ::Logging::Logger
|
459
|
+
root = logger.new :root
|
460
|
+
|
461
|
+
assert_raise(NoMethodError) {root.parent}
|
462
|
+
|
463
|
+
assert_same root, logger['A'].parent
|
464
|
+
assert_same logger['A'], logger['A::B'].parent
|
465
|
+
assert_same logger['A::B'], logger['A::B::C::D'].parent
|
466
|
+
assert_same logger['A::B'], logger['A::B::C::E'].parent
|
467
|
+
assert_same logger['A::B'], logger['A::B::C::F'].parent
|
468
|
+
|
469
|
+
assert_same logger['A::B'], logger['A::B::C'].parent
|
470
|
+
assert_same logger['A::B::C'], logger['A::B::C::D'].parent
|
471
|
+
assert_same logger['A::B::C'], logger['A::B::C::E'].parent
|
472
|
+
assert_same logger['A::B::C'], logger['A::B::C::F'].parent
|
473
|
+
|
474
|
+
assert_same logger['A::B::C::E'], logger['A::B::C::E::G'].parent
|
475
|
+
end
|
476
|
+
|
477
|
+
def test_remove_appenders
|
478
|
+
log = ::Logging::Logger['X']
|
479
|
+
|
480
|
+
appenders = lambda {log.instance_variable_get :@appenders}
|
481
|
+
assert_equal [], appenders[]
|
482
|
+
|
483
|
+
a = ::Logging::Appender.new 'test_appender_1'
|
484
|
+
b = ::Logging::Appender.new 'test_appender_2'
|
485
|
+
c = ::Logging::Appender.new 'test_appender_3'
|
486
|
+
|
487
|
+
log.add_appenders a, b, c
|
488
|
+
assert_equal [a,b,c], appenders[]
|
489
|
+
|
490
|
+
assert_raise(ArgumentError) {log.remove_appenders Object.new}
|
491
|
+
assert_raise(ArgumentError) {log.remove_appenders 10}
|
492
|
+
|
493
|
+
log.remove_appenders b
|
494
|
+
assert_equal [a,c], appenders[]
|
495
|
+
|
496
|
+
log.remove_appenders 'test_appender_1'
|
497
|
+
assert_equal [c], appenders[]
|
498
|
+
|
499
|
+
log.remove_appenders c
|
500
|
+
assert_equal [], appenders[]
|
501
|
+
|
502
|
+
log.remove_appenders a, b, c
|
503
|
+
assert_equal [], appenders[]
|
504
|
+
|
505
|
+
log.add_appenders a, b, c
|
506
|
+
assert_equal [a,b,c], appenders[]
|
507
|
+
|
508
|
+
log.remove_appenders a, c
|
509
|
+
assert_equal [b], appenders[]
|
510
|
+
end
|
511
|
+
|
512
|
+
def test_spaceship
|
513
|
+
logs = %w(
|
514
|
+
A A::B A::B::C A::B::C::D A::B::C::E A::B::C::E::G A::B::C::F
|
515
|
+
).map {|x| ::Logging::Logger[x]}
|
516
|
+
logs.unshift ::Logging::Logger[:root]
|
517
|
+
|
518
|
+
logs.inject do |a,b|
|
519
|
+
assert_equal(-1, a <=> b, "'#{a.name}' <=> '#{b.name}'")
|
520
|
+
b
|
521
|
+
end
|
522
|
+
|
523
|
+
assert_equal 1, logs[1] <=> ::Logging::Logger[:root]
|
524
|
+
assert_raise(ArgumentError) {logs[1] <=> Object.new}
|
525
|
+
assert_raise(ArgumentError) {::Logging::Logger[:root] <=> 'string'}
|
526
|
+
end
|
527
|
+
|
528
|
+
def test_trace
|
529
|
+
log = ::Logging::Logger[:root]
|
530
|
+
assert_equal false, log.trace
|
531
|
+
|
532
|
+
log.trace = true
|
533
|
+
assert_equal true, log.trace
|
534
|
+
|
535
|
+
log = ::Logging::Logger['A']
|
536
|
+
assert_equal false, log.trace
|
537
|
+
|
538
|
+
log.trace = true
|
539
|
+
assert_equal true, log.trace
|
540
|
+
end
|
541
|
+
|
542
|
+
def test_trace_eq
|
543
|
+
log = ::Logging::Logger.new 'A'
|
544
|
+
assert_equal false, log.trace
|
545
|
+
|
546
|
+
log.trace = true
|
547
|
+
assert_equal true, log.trace
|
548
|
+
|
549
|
+
log.trace = false
|
550
|
+
assert_equal false, log.trace
|
551
|
+
|
552
|
+
log.trace = 'true'
|
553
|
+
assert_equal true, log.trace
|
554
|
+
|
555
|
+
log.trace = 'false'
|
556
|
+
assert_equal false, log.trace
|
557
|
+
|
558
|
+
log.trace = nil
|
559
|
+
assert_equal false, log.trace
|
560
|
+
|
561
|
+
assert_raise(ArgumentError) {log.trace = Object}
|
562
|
+
end
|
563
|
+
|
564
|
+
end # class TestLogger
|
565
|
+
|
566
|
+
class SioAppender < ::Logging::Appenders::IO
|
567
|
+
|
568
|
+
def initialize( name, opts = {} )
|
569
|
+
@sio = StringIO.new
|
570
|
+
super(name, @sio, opts)
|
571
|
+
begin readline rescue EOFError end
|
572
|
+
end
|
573
|
+
|
574
|
+
def readline
|
575
|
+
@pos ||= 0
|
576
|
+
@sio.seek @pos
|
577
|
+
begin
|
578
|
+
line = @sio.readline
|
579
|
+
@pos = @sio.tell
|
580
|
+
line
|
581
|
+
rescue EOFError
|
582
|
+
nil
|
583
|
+
end
|
584
|
+
end
|
585
|
+
|
586
|
+
end # class SioAppender
|
587
|
+
end # module TestLogging
|
588
|
+
|
589
|
+
# EOF
|