sgeorgi-logging 1.4.2

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.
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