sgeorgi-logging 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (72) hide show
  1. data/History.txt +262 -0
  2. data/README.rdoc +115 -0
  3. data/Rakefile +32 -0
  4. data/data/bad_logging_1.rb +13 -0
  5. data/data/bad_logging_2.rb +21 -0
  6. data/data/logging.rb +42 -0
  7. data/data/logging.yaml +63 -0
  8. data/data/simple_logging.rb +13 -0
  9. data/examples/appenders.rb +47 -0
  10. data/examples/classes.rb +41 -0
  11. data/examples/consolidation.rb +83 -0
  12. data/examples/fork.rb +37 -0
  13. data/examples/formatting.rb +51 -0
  14. data/examples/hierarchies.rb +73 -0
  15. data/examples/layouts.rb +48 -0
  16. data/examples/loggers.rb +29 -0
  17. data/examples/names.rb +43 -0
  18. data/examples/simple.rb +17 -0
  19. data/lib/logging.rb +528 -0
  20. data/lib/logging/appender.rb +260 -0
  21. data/lib/logging/appenders.rb +137 -0
  22. data/lib/logging/appenders/buffering.rb +178 -0
  23. data/lib/logging/appenders/console.rb +60 -0
  24. data/lib/logging/appenders/email.rb +75 -0
  25. data/lib/logging/appenders/file.rb +75 -0
  26. data/lib/logging/appenders/growl.rb +197 -0
  27. data/lib/logging/appenders/io.rb +69 -0
  28. data/lib/logging/appenders/rolling_file.rb +327 -0
  29. data/lib/logging/appenders/string_io.rb +68 -0
  30. data/lib/logging/appenders/syslog.rb +210 -0
  31. data/lib/logging/config/configurator.rb +188 -0
  32. data/lib/logging/config/yaml_configurator.rb +191 -0
  33. data/lib/logging/layout.rb +117 -0
  34. data/lib/logging/layouts.rb +47 -0
  35. data/lib/logging/layouts/basic.rb +32 -0
  36. data/lib/logging/layouts/parseable.rb +211 -0
  37. data/lib/logging/layouts/pattern.rb +311 -0
  38. data/lib/logging/log_event.rb +45 -0
  39. data/lib/logging/logger.rb +504 -0
  40. data/lib/logging/repository.rb +232 -0
  41. data/lib/logging/root_logger.rb +61 -0
  42. data/lib/logging/stats.rb +278 -0
  43. data/lib/logging/utils.rb +201 -0
  44. data/lib/spec/logging_helper.rb +34 -0
  45. data/test/appenders/test_buffered_io.rb +176 -0
  46. data/test/appenders/test_console.rb +66 -0
  47. data/test/appenders/test_email.rb +170 -0
  48. data/test/appenders/test_file.rb +95 -0
  49. data/test/appenders/test_growl.rb +127 -0
  50. data/test/appenders/test_io.rb +129 -0
  51. data/test/appenders/test_rolling_file.rb +209 -0
  52. data/test/appenders/test_syslog.rb +194 -0
  53. data/test/benchmark.rb +86 -0
  54. data/test/config/test_configurator.rb +70 -0
  55. data/test/config/test_yaml_configurator.rb +40 -0
  56. data/test/layouts/test_basic.rb +42 -0
  57. data/test/layouts/test_json.rb +112 -0
  58. data/test/layouts/test_pattern.rb +198 -0
  59. data/test/layouts/test_yaml.rb +121 -0
  60. data/test/setup.rb +43 -0
  61. data/test/test_appender.rb +152 -0
  62. data/test/test_consolidate.rb +46 -0
  63. data/test/test_layout.rb +110 -0
  64. data/test/test_log_event.rb +80 -0
  65. data/test/test_logger.rb +699 -0
  66. data/test/test_logging.rb +267 -0
  67. data/test/test_repository.rb +158 -0
  68. data/test/test_root_logger.rb +81 -0
  69. data/test/test_stats.rb +274 -0
  70. data/test/test_utils.rb +116 -0
  71. data/version.txt +1 -0
  72. metadata +227 -0
@@ -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_equal 50, @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
@@ -0,0 +1,699 @@
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 test_initialize
10
+ assert_nothing_raised {::Logging::Logger[:test]}
11
+ assert_equal ::Logging::Logger[:test], ::Logging::Logger['test']
12
+ assert_nothing_raised {::Logging::Logger.new(Object)}
13
+ end
14
+
15
+ def test_add
16
+ root = ::Logging::Logger[:root]
17
+ root.level = 'info'
18
+
19
+ a1 = ::Logging::Appenders::StringIo.new 'a1'
20
+ a2 = ::Logging::Appenders::StringIo.new 'a2'
21
+ log = ::Logging::Logger.new 'A Logger'
22
+
23
+ root.add_appenders a1
24
+ assert_nil a1.readline
25
+ assert_nil a2.readline
26
+
27
+ log.add(0, 'this should NOT be logged')
28
+ assert_nil a1.readline
29
+ assert_nil a2.readline
30
+
31
+ log.add(1, 'this should be logged')
32
+ assert_equal " INFO A Logger : this should be logged\n", a1.readline
33
+ assert_nil a1.readline
34
+ assert_nil a2.readline
35
+
36
+ log.add(2,[1,2,3,4])
37
+ assert_equal " WARN A Logger : <Array> #{[1,2,3,4]}\n", a1.readline
38
+ assert_nil a1.readline
39
+ assert_nil a2.readline
40
+
41
+ log.add_appenders a2
42
+ log.add(3, 'an error has occurred')
43
+ assert_equal "ERROR A Logger : an error has occurred\n", a1.readline
44
+ assert_equal "ERROR A Logger : an error has occurred\n", a2.readline
45
+ assert_nil a1.readline
46
+ assert_nil a2.readline
47
+
48
+ log.additive = false
49
+ log.add(3, 'another error has occurred')
50
+ assert_equal "ERROR A Logger : another error has occurred\n", a2.readline
51
+ assert_nil a1.readline
52
+ assert_nil a2.readline
53
+
54
+ log.add_appenders a1
55
+ log.add(4, 'fatal exception')
56
+ assert_equal "FATAL A Logger : fatal exception\n", a1.readline
57
+ assert_equal "FATAL A Logger : fatal exception\n", a2.readline
58
+ assert_nil a1.readline
59
+ assert_nil a2.readline
60
+
61
+
62
+ log.level = :warn
63
+ log.add(2) do
64
+ str = 'a string of data'
65
+ str
66
+ end
67
+ assert_equal " WARN A Logger : a string of data\n", a1.readline
68
+ assert_equal " WARN A Logger : a string of data\n", a2.readline
69
+ assert_nil a1.readline
70
+ assert_nil a2.readline
71
+
72
+ log.add(1) do
73
+ rb_raise(RuntimeError, "this block should not be executed")
74
+ end
75
+ assert_nil a1.readline
76
+ assert_nil a2.readline
77
+ end
78
+
79
+ def test_add_appenders
80
+ log = ::Logging::Logger.new 'A'
81
+
82
+ appenders = lambda {log.instance_variable_get :@appenders}
83
+ assert_equal [], appenders[]
84
+
85
+ assert_raise(ArgumentError) {log.add_appenders Object.new}
86
+ assert_raise(ArgumentError) {log.add_appenders 'not an appender'}
87
+
88
+ a = ::Logging::Appender.new 'test_appender_1'
89
+ b = ::Logging::Appender.new 'test_appender_2'
90
+ c = ::Logging::Appender.new 'test_appender_3'
91
+
92
+ log.add_appenders a
93
+ assert_equal [a], appenders[]
94
+
95
+ log.add_appenders a
96
+ assert_equal [a], appenders[]
97
+
98
+ log.add_appenders b
99
+ assert_equal [a,b], appenders[]
100
+
101
+ log.add_appenders c
102
+ assert_equal [a,b,c], appenders[]
103
+
104
+ log.add_appenders a, c
105
+ assert_equal [a,b,c], appenders[]
106
+
107
+ log.clear_appenders
108
+ assert_equal [], appenders[]
109
+
110
+ log.add_appenders a, c
111
+ assert_equal [a,c], appenders[]
112
+ end
113
+
114
+ def test_additive
115
+ root = ::Logging::Logger.new :root
116
+ log = ::Logging::Logger.new 'A'
117
+
118
+ assert_raise(NoMethodError) {root.additive}
119
+ assert_equal true, log.additive
120
+ end
121
+
122
+ def test_additive_eq
123
+ root = ::Logging::Logger.new :root
124
+ log = ::Logging::Logger.new 'A'
125
+
126
+ assert_raise(NoMethodError) {root.additive = false}
127
+ assert_equal true, log.additive
128
+
129
+ log.additive = false
130
+ assert_equal false, log.additive
131
+
132
+ log.additive = true
133
+ assert_equal true, log.additive
134
+
135
+ log.additive = 'false'
136
+ assert_equal false, log.additive
137
+
138
+ log.additive = 'true'
139
+ assert_equal true, log.additive
140
+
141
+ log.additive = nil
142
+ assert_equal true, log.additive
143
+
144
+ assert_raise(ArgumentError) {log.additive = Object}
145
+ end
146
+
147
+ def test_appenders_eq
148
+ log = ::Logging::Logger.new '42'
149
+
150
+ appenders = lambda {log.instance_variable_get :@appenders}
151
+ assert_equal [], appenders[]
152
+
153
+ assert_raise(ArgumentError) {log.appenders = Object.new}
154
+ assert_raise(ArgumentError) {log.appenders = 'not an appender'}
155
+
156
+ a = ::Logging::Appender.new 'test_appender_1'
157
+ b = ::Logging::Appender.new 'test_appender_2'
158
+ c = ::Logging::Appender.new 'test_appender_3'
159
+
160
+ log.appenders = a, b, c
161
+ assert_equal [a, b, c], appenders[]
162
+
163
+ log.appenders = b
164
+ assert_equal [b], appenders[]
165
+
166
+ log.appenders = c, a, b
167
+ assert_equal [c,a,b], appenders[]
168
+
169
+ log.appenders = nil
170
+ assert_equal [], appenders[]
171
+
172
+ log.appenders = %w[test_appender_1 test_appender_3]
173
+ assert_equal [a,c], appenders[]
174
+
175
+ assert_raise(ArgumentError) {log.appenders = 'unknown'}
176
+ end
177
+
178
+ def test_class_aref
179
+ root = ::Logging::Logger[:root]
180
+ assert_same root, ::Logging::Logger[:root]
181
+
182
+ a = []
183
+ assert_same ::Logging::Logger['Array'], ::Logging::Logger[Array]
184
+ assert_same ::Logging::Logger['Array'], ::Logging::Logger[a]
185
+
186
+ assert_not_same ::Logging::Logger['Array'], ::Logging::Logger[:root]
187
+ assert_not_same ::Logging::Logger['A'], ::Logging::Logger['A::B']
188
+ end
189
+
190
+ def test_class_root
191
+ root = ::Logging::Logger[:root]
192
+ assert_same root, ::Logging::Logger.root
193
+ end
194
+
195
+ def test_clear_appenders
196
+ log = ::Logging::Logger.new 'Elliott'
197
+
198
+ appenders = lambda {log.instance_variable_get :@appenders}
199
+ assert_equal [], appenders[]
200
+
201
+ a = ::Logging::Appender.new 'test_appender_1'
202
+ b = ::Logging::Appender.new 'test_appender_2'
203
+ c = ::Logging::Appender.new 'test_appender_3'
204
+
205
+ log.add_appenders a, b, c
206
+ assert_equal [a,b,c], appenders[]
207
+
208
+ log.clear_appenders
209
+ assert_equal [], appenders[]
210
+ end
211
+
212
+ def test_concat
213
+ a1 = ::Logging::Appenders::StringIo.new 'a1'
214
+ a2 = ::Logging::Appenders::StringIo.new 'a2'
215
+ log = ::Logging::Logger.new 'A'
216
+
217
+ ::Logging::Logger[:root].add_appenders a1
218
+ assert_nil a1.readline
219
+ assert_nil a2.readline
220
+
221
+ log << "this is line one of the log file\n"
222
+ assert_equal "this is line one of the log file\n", a1.readline
223
+ assert_nil a1.readline
224
+ assert_nil a2.readline
225
+
226
+ log << "this is line two of the log file\n"
227
+ log << "this is line three of the log file\n"
228
+ assert_equal "this is line two of the log file\n", a1.readline
229
+ assert_equal "this is line three of the log file\n", a1.readline
230
+ assert_nil a1.readline
231
+ assert_nil a2.readline
232
+
233
+ log.add_appenders a2
234
+ log << "this is line four of the log file\n"
235
+ assert_equal "this is line four of the log file\n", a1.readline
236
+ assert_equal "this is line four of the log file\n", a2.readline
237
+ assert_nil a1.readline
238
+ assert_nil a2.readline
239
+
240
+ log.additive = false
241
+ log << "this is line five of the log file\n"
242
+ assert_equal "this is line five of the log file\n", a2.readline
243
+ assert_nil a1.readline
244
+ assert_nil a2.readline
245
+
246
+ log.add_appenders a1
247
+ log << "this is line six of the log file\n"
248
+ assert_equal "this is line six of the log file\n", a1.readline
249
+ assert_equal "this is line six of the log file\n", a2.readline
250
+ assert_nil a1.readline
251
+ assert_nil a2.readline
252
+ end
253
+
254
+ def test_inspect
255
+ root = ::Logging::Logger.new :root
256
+
257
+ str = "<#{root.class.name}:0x%x name=\"#{root.name}\">" % root.object_id
258
+ assert_equal str, root.inspect
259
+ end
260
+
261
+ def test_level
262
+ root = ::Logging::Logger.new :root
263
+ log = ::Logging::Logger.new 'A'
264
+
265
+ assert_equal 0, root.level
266
+ assert_equal 0, log.level
267
+
268
+ root.level = :warn
269
+ assert_equal 2, root.level
270
+ assert_equal 2, log.level
271
+
272
+ log.level = nil
273
+ assert_equal 2, root.level
274
+ assert_equal 2, log.level
275
+
276
+ log.level = :error
277
+ assert_equal 2, root.level
278
+ assert_equal 3, log.level
279
+ end
280
+
281
+ def test_level_eq
282
+ root = ::Logging::Logger.new :root
283
+ log = ::Logging::Logger.new 'A'
284
+ logb = ::Logging::Logger.new 'A::B'
285
+
286
+ assert_equal 0, root.level
287
+ assert_equal 0, log.level
288
+ assert_equal 0, logb.level
289
+ assert_equal true, root.debug?
290
+ assert_equal true, log.debug?
291
+ assert_equal true, logb.debug?
292
+
293
+ assert_raise(ArgumentError) {root.level = -1}
294
+ assert_raise(ArgumentError) {root.level = 6}
295
+ assert_raise(ArgumentError) {root.level = Object}
296
+ assert_raise(ArgumentError) {root.level = 'bob'}
297
+ assert_raise(ArgumentError) {root.level = :wtf}
298
+
299
+ root.level = 'INFO'
300
+ assert_equal 1, root.level
301
+ assert_equal 1, log.level
302
+ assert_equal 1, logb.level
303
+ assert_equal false, root.debug?
304
+ assert_equal true, root.info?
305
+ assert_equal false, log.debug?
306
+ assert_equal true , log.info?
307
+ assert_equal false, logb.debug?
308
+ assert_equal true , logb.info?
309
+
310
+ root.level = :warn
311
+ assert_equal 2, root.level
312
+ assert_equal 2, log.level
313
+ assert_equal 2, logb.level
314
+ assert_equal false, root.info?
315
+ assert_equal true, root.warn?
316
+ assert_equal false, log.info?
317
+ assert_equal true , log.warn?
318
+ assert_equal false, logb.info?
319
+ assert_equal true , logb.warn?
320
+
321
+ root.level = 'error'
322
+ assert_equal 3, root.level
323
+ assert_equal 3, log.level
324
+ assert_equal 3, logb.level
325
+ assert_equal false, root.warn?
326
+ assert_equal true, root.error?
327
+ assert_equal false, log.warn?
328
+ assert_equal true , log.error?
329
+ assert_equal false, logb.warn?
330
+ assert_equal true , logb.error?
331
+
332
+ root.level = 4
333
+ assert_equal 4, root.level
334
+ assert_equal 4, log.level
335
+ assert_equal 4, logb.level
336
+ assert_equal false, root.error?
337
+ assert_equal true, root.fatal?
338
+ assert_equal false, log.error?
339
+ assert_equal true , log.fatal?
340
+ assert_equal false, logb.error?
341
+ assert_equal true , logb.fatal?
342
+
343
+ log.level = nil
344
+ assert_equal 4, root.level
345
+ assert_equal 4, log.level
346
+ assert_equal 4, logb.level
347
+ assert_equal false, root.error?
348
+ assert_equal true, root.fatal?
349
+ assert_equal false, log.error?
350
+ assert_equal true , log.fatal?
351
+ assert_equal false, logb.error?
352
+ assert_equal true , logb.fatal?
353
+
354
+ log.level = :DEBUG
355
+ assert_equal 4, root.level
356
+ assert_equal 0, log.level
357
+ assert_equal 0, logb.level
358
+ assert_equal false, root.error?
359
+ assert_equal true, root.fatal?
360
+ assert_equal true, log.debug?
361
+ assert_equal true, logb.debug?
362
+
363
+ log.level = :off
364
+ assert_equal 4, root.level
365
+ assert_equal 5, log.level
366
+ assert_equal 5, logb.level
367
+ assert_equal false, root.error?
368
+ assert_equal true, root.fatal?
369
+ assert_equal false, log.fatal?
370
+ assert_equal false, logb.fatal?
371
+
372
+ root.level = :all
373
+ assert_equal 0, root.level
374
+ assert_equal 5, log.level
375
+ assert_equal 5, logb.level
376
+ assert_equal true, root.debug?
377
+ assert_equal false, log.fatal?
378
+ assert_equal false, logb.fatal?
379
+
380
+ log.level = nil
381
+ assert_equal 0, root.level
382
+ assert_equal 0, log.level
383
+ assert_equal 0, logb.level
384
+ assert_equal true, root.debug?
385
+ assert_equal true, log.debug?
386
+ assert_equal true, logb.debug?
387
+
388
+ logb.level = :warn
389
+ assert_equal 0, root.level
390
+ assert_equal 0, log.level
391
+ assert_equal 2, logb.level
392
+ assert_equal true, root.debug?
393
+ assert_equal true, log.debug?
394
+ assert_equal false, logb.info?
395
+ assert_equal true, logb.warn?
396
+
397
+ log.level = :info
398
+ logb.level = nil
399
+ assert_equal 0, root.level
400
+ assert_equal 1, log.level
401
+ assert_equal 1, logb.level
402
+ assert_equal true, root.debug?
403
+ assert_equal false, logb.debug?
404
+ assert_equal true, log.info?
405
+ assert_equal false, logb.debug?
406
+ assert_equal true, logb.info?
407
+ end
408
+
409
+ def test_log
410
+ root = ::Logging::Logger[:root]
411
+ root.level = 'info'
412
+
413
+ a1 = ::Logging::Appenders::StringIo.new 'a1'
414
+ a2 = ::Logging::Appenders::StringIo.new 'a2'
415
+ log = ::Logging::Logger.new 'A Logger'
416
+
417
+ root.add_appenders a1
418
+ assert_nil a1.readline
419
+ assert_nil a2.readline
420
+
421
+ log.debug 'this should NOT be logged'
422
+ assert_nil a1.readline
423
+ assert_nil a2.readline
424
+
425
+ log.info 'this should be logged'
426
+ assert_equal " INFO A Logger : this should be logged\n", a1.readline
427
+ assert_nil a1.readline
428
+ assert_nil a2.readline
429
+
430
+ log.warn [1,2,3,4]
431
+ assert_equal " WARN A Logger : <Array> #{[1,2,3,4]}\n", a1.readline
432
+ assert_nil a1.readline
433
+ assert_nil a2.readline
434
+
435
+ log.add_appenders a2
436
+ log.error 'an error has occurred'
437
+ assert_equal "ERROR A Logger : an error has occurred\n", a1.readline
438
+ assert_equal "ERROR A Logger : an error has occurred\n", a2.readline
439
+ assert_nil a1.readline
440
+ assert_nil a2.readline
441
+
442
+ log.additive = false
443
+ log.error 'another error has occurred'
444
+ assert_equal "ERROR A Logger : another error has occurred\n", a2.readline
445
+ assert_nil a1.readline
446
+ assert_nil a2.readline
447
+
448
+ log.add_appenders a1
449
+ log.fatal 'fatal exception'
450
+ assert_equal "FATAL A Logger : fatal exception\n", a1.readline
451
+ assert_equal "FATAL A Logger : fatal exception\n", a2.readline
452
+ assert_nil a1.readline
453
+ assert_nil a2.readline
454
+
455
+ assert_equal false, log.debug
456
+ assert_equal true, log.info
457
+ assert_equal " INFO A Logger : <NilClass> nil\n", a1.readline
458
+ assert_equal " INFO A Logger : <NilClass> nil\n", a2.readline
459
+ assert_equal true, log.warn
460
+ assert_equal " WARN A Logger : <NilClass> nil\n", a1.readline
461
+ assert_equal " WARN A Logger : <NilClass> nil\n", a2.readline
462
+ assert_equal true, log.error
463
+ assert_equal "ERROR A Logger : <NilClass> nil\n", a1.readline
464
+ assert_equal "ERROR A Logger : <NilClass> nil\n", a2.readline
465
+ assert_equal true, log.fatal
466
+ assert_equal "FATAL A Logger : <NilClass> nil\n", a1.readline
467
+ assert_equal "FATAL A Logger : <NilClass> nil\n", a2.readline
468
+
469
+ log.level = :warn
470
+ assert_equal false, log.debug
471
+ assert_equal false, log.info
472
+ assert_equal true, log.warn
473
+ assert_equal " WARN A Logger : <NilClass> nil\n", a1.readline
474
+ assert_equal " WARN A Logger : <NilClass> nil\n", a2.readline
475
+ assert_equal true, log.error
476
+ assert_equal "ERROR A Logger : <NilClass> nil\n", a1.readline
477
+ assert_equal "ERROR A Logger : <NilClass> nil\n", a2.readline
478
+ assert_equal true, log.fatal
479
+ assert_equal "FATAL A Logger : <NilClass> nil\n", a1.readline
480
+ assert_equal "FATAL A Logger : <NilClass> nil\n", a2.readline
481
+
482
+ assert_raise(NoMethodError) {log.critical 'this log level does not exist'}
483
+
484
+ log.warn do
485
+ str = 'a string of data'
486
+ str
487
+ end
488
+ assert_equal " WARN A Logger : a string of data\n", a1.readline
489
+ assert_equal " WARN A Logger : a string of data\n", a2.readline
490
+ assert_nil a1.readline
491
+ assert_nil a2.readline
492
+
493
+ log.info do
494
+ rb_raise(RuntimeError, "this block should not be executed")
495
+ end
496
+ assert_nil a1.readline
497
+ assert_nil a2.readline
498
+ end
499
+
500
+ def test_log_eh
501
+ ::Logging::Logger[:root].level = 'info'
502
+ log = ::Logging::Logger['A Logger']
503
+
504
+ assert_equal false, log.debug?
505
+ assert_equal true, log.info?
506
+ assert_equal true, log.warn?
507
+ assert_equal true, log.error?
508
+ assert_equal true, log.fatal?
509
+
510
+ log.level = :warn
511
+ assert_equal false, log.debug?
512
+ assert_equal false, log.info?
513
+ assert_equal true, log.warn?
514
+ assert_equal true, log.error?
515
+ assert_equal true, log.fatal?
516
+
517
+ assert_raise(NoMethodError) do
518
+ log.critical? 'this log level does not exist'
519
+ end
520
+ end
521
+
522
+ def test_name
523
+ root = ::Logging::Logger.new :root
524
+ log = ::Logging::Logger.new 'A'
525
+
526
+ assert_equal 'root', root.name
527
+ assert_equal 'A', log.name
528
+ end
529
+
530
+ def test_parent
531
+ logger = ::Logging::Logger
532
+ root = logger.new :root
533
+
534
+ assert_raise(NoMethodError) {root.parent}
535
+
536
+ assert_same root, logger['A'].parent
537
+ assert_same logger['A'], logger['A::B'].parent
538
+ assert_same logger['A::B'], logger['A::B::C::D'].parent
539
+ assert_same logger['A::B'], logger['A::B::C::E'].parent
540
+ assert_same logger['A::B'], logger['A::B::C::F'].parent
541
+
542
+ assert_same logger['A::B'], logger['A::B::C'].parent
543
+ assert_same logger['A::B::C'], logger['A::B::C::D'].parent
544
+ assert_same logger['A::B::C'], logger['A::B::C::E'].parent
545
+ assert_same logger['A::B::C'], logger['A::B::C::F'].parent
546
+
547
+ assert_same logger['A::B::C::E'], logger['A::B::C::E::G'].parent
548
+ end
549
+
550
+ def test_remove_appenders
551
+ log = ::Logging::Logger['X']
552
+
553
+ appenders = lambda {log.instance_variable_get :@appenders}
554
+ assert_equal [], appenders[]
555
+
556
+ a = ::Logging::Appender.new 'test_appender_1'
557
+ b = ::Logging::Appender.new 'test_appender_2'
558
+ c = ::Logging::Appender.new 'test_appender_3'
559
+
560
+ log.add_appenders a, b, c
561
+ assert_equal [a,b,c], appenders[]
562
+
563
+ assert_raise(ArgumentError) {log.remove_appenders Object.new}
564
+ assert_raise(ArgumentError) {log.remove_appenders 10}
565
+
566
+ log.remove_appenders b
567
+ assert_equal [a,c], appenders[]
568
+
569
+ log.remove_appenders 'test_appender_1'
570
+ assert_equal [c], appenders[]
571
+
572
+ log.remove_appenders c
573
+ assert_equal [], appenders[]
574
+
575
+ log.remove_appenders a, b, c
576
+ assert_equal [], appenders[]
577
+
578
+ log.add_appenders a, b, c
579
+ assert_equal [a,b,c], appenders[]
580
+
581
+ log.remove_appenders a, c
582
+ assert_equal [b], appenders[]
583
+ end
584
+
585
+ def test_spaceship
586
+ logs = %w(
587
+ A A::B A::B::C A::B::C::D A::B::C::E A::B::C::E::G A::B::C::F
588
+ ).map {|x| ::Logging::Logger[x]}
589
+ logs.unshift ::Logging::Logger[:root]
590
+
591
+ logs.inject do |a,b|
592
+ assert_equal(-1, a <=> b, "'#{a.name}' <=> '#{b.name}'")
593
+ b
594
+ end
595
+
596
+ assert_equal 1, logs[1] <=> ::Logging::Logger[:root]
597
+ assert_raise(ArgumentError) {logs[1] <=> Object.new}
598
+ assert_raise(ArgumentError) {::Logging::Logger[:root] <=> 'string'}
599
+ end
600
+
601
+ def test_trace
602
+ log = ::Logging::Logger[:root]
603
+ assert_equal false, log.trace
604
+
605
+ log.trace = true
606
+ assert_equal true, log.trace
607
+
608
+ log = ::Logging::Logger['A']
609
+ assert_equal false, log.trace
610
+
611
+ log.trace = true
612
+ assert_equal true, log.trace
613
+ end
614
+
615
+ def test_trace_eq
616
+ log = ::Logging::Logger.new 'A'
617
+ assert_equal false, log.trace
618
+
619
+ log.trace = true
620
+ assert_equal true, log.trace
621
+
622
+ log.trace = false
623
+ assert_equal false, log.trace
624
+
625
+ log.trace = 'true'
626
+ assert_equal true, log.trace
627
+
628
+ log.trace = 'false'
629
+ assert_equal false, log.trace
630
+
631
+ log.trace = nil
632
+ assert_equal false, log.trace
633
+
634
+ assert_raise(ArgumentError) {log.trace = Object}
635
+ end
636
+
637
+ def test_dump_configuration
638
+ log_a = ::Logging::Logger['A-logger']
639
+ log_b = ::Logging::Logger['A-logger::B-logger']
640
+ log_c = ::Logging::Logger['A-logger::B-logger::C-logger']
641
+ log_d = ::Logging::Logger['A-logger::D-logger']
642
+
643
+ sio = StringIO.new
644
+ sio.extend ::Logging::Appenders::StringIo::IoToS
645
+
646
+ log_a._dump_configuration( sio )
647
+ assert_equal(
648
+ "A-logger ........................................ debug +A -T\n", sio.to_s)
649
+
650
+ log_b._dump_configuration( sio )
651
+ assert_equal(
652
+ "A-logger::B-logger .............................. debug +A -T\n", sio.to_s)
653
+
654
+ log_c._dump_configuration( sio )
655
+ assert_equal(
656
+ "A-logger::B-logger::C-logger .................... debug +A -T\n", sio.to_s)
657
+
658
+ log_d._dump_configuration( sio )
659
+ assert_equal(
660
+ "A-logger::D-logger .............................. debug +A -T\n", sio.to_s)
661
+
662
+ log_b.level = :warn
663
+ log_b.trace = true
664
+ log_b._dump_configuration( sio )
665
+ assert_equal(
666
+ "A-logger::B-logger .............................. *warn +A +T\n", sio.to_s)
667
+
668
+ log_c.additive = false
669
+ log_c._dump_configuration( sio )
670
+ assert_equal(
671
+ "A-logger::B-logger::C-logger .................... warn -A -T\n", sio.to_s)
672
+
673
+ # with an indent specified
674
+ log_a._dump_configuration( sio, 4 )
675
+ assert_equal(
676
+ " A-logger .................................... debug +A -T\n", sio.to_s)
677
+
678
+ log_b._dump_configuration( sio, 8 )
679
+ assert_equal(
680
+ " A-logger::B-logger ...................... *warn +A +T\n", sio.to_s)
681
+
682
+ log_c._dump_configuration( sio, 10 )
683
+ assert_equal(
684
+ " A-logger::B-logger::C-logger .......... warn -A -T\n", sio.to_s)
685
+
686
+ log_d._dump_configuration( sio, 22 )
687
+ assert_equal(
688
+ " A-logger::D-logger ........ debug +A -T\n", sio.to_s)
689
+
690
+ log_c.level = 0
691
+ log_c._dump_configuration( sio, 26 )
692
+ assert_equal(
693
+ " A-logger::B...::C-logger *debug -A -T\n", sio.to_s)
694
+ end
695
+
696
+ end # class TestLogger
697
+ end # module TestLogging
698
+
699
+ # EOF