TwP-logging 0.9.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. data/History.txt +169 -0
  2. data/README.rdoc +102 -0
  3. data/Rakefile +42 -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/lib/logging.rb +408 -0
  10. data/lib/logging/appender.rb +303 -0
  11. data/lib/logging/appenders/buffering.rb +167 -0
  12. data/lib/logging/appenders/console.rb +62 -0
  13. data/lib/logging/appenders/email.rb +75 -0
  14. data/lib/logging/appenders/file.rb +54 -0
  15. data/lib/logging/appenders/growl.rb +197 -0
  16. data/lib/logging/appenders/io.rb +69 -0
  17. data/lib/logging/appenders/rolling_file.rb +291 -0
  18. data/lib/logging/appenders/syslog.rb +201 -0
  19. data/lib/logging/config/configurator.rb +190 -0
  20. data/lib/logging/config/yaml_configurator.rb +195 -0
  21. data/lib/logging/layout.rb +119 -0
  22. data/lib/logging/layouts/basic.rb +34 -0
  23. data/lib/logging/layouts/pattern.rb +296 -0
  24. data/lib/logging/log_event.rb +51 -0
  25. data/lib/logging/logger.rb +490 -0
  26. data/lib/logging/repository.rb +172 -0
  27. data/lib/logging/root_logger.rb +61 -0
  28. data/lib/logging/stats.rb +278 -0
  29. data/lib/logging/utils.rb +130 -0
  30. data/logging.gemspec +41 -0
  31. data/test/appenders/test_buffered_io.rb +183 -0
  32. data/test/appenders/test_console.rb +66 -0
  33. data/test/appenders/test_email.rb +171 -0
  34. data/test/appenders/test_file.rb +93 -0
  35. data/test/appenders/test_growl.rb +128 -0
  36. data/test/appenders/test_io.rb +142 -0
  37. data/test/appenders/test_rolling_file.rb +207 -0
  38. data/test/appenders/test_syslog.rb +194 -0
  39. data/test/benchmark.rb +87 -0
  40. data/test/config/test_configurator.rb +70 -0
  41. data/test/config/test_yaml_configurator.rb +40 -0
  42. data/test/layouts/test_basic.rb +43 -0
  43. data/test/layouts/test_pattern.rb +177 -0
  44. data/test/setup.rb +74 -0
  45. data/test/test_appender.rb +166 -0
  46. data/test/test_layout.rb +110 -0
  47. data/test/test_log_event.rb +80 -0
  48. data/test/test_logger.rb +734 -0
  49. data/test/test_logging.rb +267 -0
  50. data/test/test_repository.rb +126 -0
  51. data/test/test_root_logger.rb +81 -0
  52. data/test/test_stats.rb +274 -0
  53. data/test/test_utils.rb +116 -0
  54. metadata +156 -0
@@ -0,0 +1,267 @@
1
+
2
+ require File.join(File.dirname(__FILE__), %w[setup])
3
+
4
+ module TestLogging
5
+
6
+ class TestLogging < Test::Unit::TestCase
7
+ include LoggingTestCase
8
+
9
+ def setup
10
+ super
11
+ @levels = ::Logging::LEVELS
12
+ @lnames = ::Logging::LNAMES
13
+
14
+ @fn = File.join(TMP, 'test.log')
15
+ @glob = File.join(TMP, '*.log')
16
+ end
17
+
18
+ def test_backtrace
19
+ assert_equal true, ::Logging.backtrace
20
+
21
+ assert_equal false, ::Logging.backtrace('off')
22
+ assert_equal false, ::Logging.backtrace
23
+
24
+ assert_equal true, ::Logging.backtrace('on')
25
+ assert_equal true, ::Logging.backtrace
26
+
27
+ assert_equal false, ::Logging.backtrace(:off)
28
+ assert_equal false, ::Logging.backtrace
29
+
30
+ assert_equal true, ::Logging.backtrace(:on)
31
+ assert_equal true, ::Logging.backtrace
32
+
33
+ assert_equal false, ::Logging.backtrace(false)
34
+ assert_equal false, ::Logging.backtrace
35
+
36
+ assert_equal true, ::Logging.backtrace(true)
37
+ assert_equal true, ::Logging.backtrace
38
+
39
+ assert_raise(ArgumentError) {::Logging.backtrace 'foo'}
40
+ end
41
+
42
+ def test_configure
43
+ assert_raise(ArgumentError) {::Logging.configure 'blah.txt'}
44
+
45
+ ::Logging.configure 'data/logging.yaml'
46
+
47
+ names = %w[DEB INF PRT WRN ERR FAT]
48
+ assert_equal names, ::Logging::LNAMES
49
+ assert_equal :inspect, ::Logging::OBJ_FORMAT
50
+ assert_equal 3, ::Logging::Logger.root.level
51
+
52
+ # verify the appenders
53
+ h = ::Logging::Appender.instance_variable_get :@appenders
54
+ assert_equal ['logfile', 'stderr'], h.keys.sort
55
+
56
+ # start with the File appender
57
+ logfile = ::Logging::Appender['logfile']
58
+ assert_instance_of ::Logging::Appenders::File, logfile
59
+ assert_equal 0, logfile.level
60
+ assert_equal 'tmp/temp.log', logfile.instance_variable_get(:@fn)
61
+
62
+ layout = logfile.layout
63
+ assert_instance_of ::Logging::Layouts::Pattern, layout
64
+ assert_equal '[%d] %l %c : %m\\n', layout.pattern
65
+ assert_equal 'to_s', layout.date_method
66
+ assert_nil layout.date_pattern
67
+
68
+ # and now the Stderr appender
69
+ stderr = ::Logging::Appender['stderr']
70
+ assert_instance_of ::Logging::Appenders::Stderr, stderr
71
+ assert_equal 0, stderr.level
72
+
73
+ layout = stderr.layout
74
+ assert_instance_of ::Logging::Layouts::Basic, layout
75
+
76
+ # verify the loggers
77
+ h = ::Logging::Repository.instance.instance_variable_get :@h
78
+ assert_equal 4, h.length
79
+
80
+ # mylogger
81
+ mylogger = ::Logging::Logger['mylogger']
82
+ assert_equal 0, mylogger.level
83
+ assert_equal false, mylogger.additive
84
+ assert_equal false, mylogger.trace
85
+
86
+ appenders = mylogger.instance_variable_get :@appenders
87
+ assert_equal 2, appenders.length
88
+ assert_equal ['logfile', 'stderr'], appenders.map {|a| a.name}.sort
89
+
90
+ # yourlogger
91
+ yourlogger = ::Logging::Logger['yourlogger']
92
+ assert_equal 1, yourlogger.level
93
+ assert_equal true, yourlogger.additive
94
+ assert_equal false, yourlogger.trace
95
+
96
+ appenders = yourlogger.instance_variable_get :@appenders
97
+ assert_equal 2, appenders.length
98
+ assert_equal ['logfile', 'stderr'], appenders.map {|a| a.name}.sort
99
+ end
100
+
101
+ def test_logger
102
+ assert_raise(TypeError) {::Logging.logger []}
103
+
104
+ logger = ::Logging.logger STDOUT
105
+ assert_match %r/\A-?\d+\z/, logger.name
106
+ assert_same logger, ::Logging.logger(STDOUT)
107
+
108
+ logger.close
109
+ assert !STDOUT.closed?
110
+
111
+ assert !File.exist?(@fn)
112
+ fd = File.new @fn, 'w'
113
+ logger = ::Logging.logger fd, 2, 100
114
+ assert_equal @fn, logger.name
115
+ logger.debug 'this is a debug message'
116
+ logger.warn 'this is a warning message'
117
+ logger.error 'and now we should have over 100 bytes of data ' +
118
+ 'in the log file'
119
+ logger.info 'but the log file should not roll since we provided ' +
120
+ 'a file descriptor -- not a file name'
121
+ logger.close
122
+ assert fd.closed?
123
+ assert File.exist?(@fn)
124
+ assert_equal 1, Dir.glob(@glob).length
125
+
126
+ FileUtils.rm_f @fn
127
+ assert !File.exist?(@fn)
128
+ logger = ::Logging.logger @fn, 2, 100
129
+ assert File.exist?(@fn)
130
+ assert_equal @fn, logger.name
131
+ logger.debug 'this is a debug message'
132
+ logger.warn 'this is a warning message'
133
+ logger.error 'and now we should have over 100 bytes of data ' +
134
+ 'in the log file'
135
+ logger.info 'but the log file should not roll since we provided ' +
136
+ 'a file descriptor -- not a file name'
137
+ logger.close
138
+ assert_equal 3, Dir.glob(@glob).length
139
+ end
140
+
141
+ def test_init_default
142
+ assert_equal({}, @levels)
143
+ assert_equal([], @lnames)
144
+ assert_same false, ::Logging.const_defined?(:MAX_LEVEL_LENGTH)
145
+
146
+ ::Logging::Repository.instance
147
+
148
+ assert_equal 5, @levels.length
149
+ assert_equal 5, @lnames.length
150
+ assert_equal 5, ::Logging::MAX_LEVEL_LENGTH
151
+
152
+ assert_equal 0, @levels['debug']
153
+ assert_equal 1, @levels['info']
154
+ assert_equal 2, @levels['warn']
155
+ assert_equal 3, @levels['error']
156
+ assert_equal 4, @levels['fatal']
157
+
158
+ assert_equal 'DEBUG', @lnames[0]
159
+ assert_equal 'INFO', @lnames[1]
160
+ assert_equal 'WARN', @lnames[2]
161
+ assert_equal 'ERROR', @lnames[3]
162
+ assert_equal 'FATAL', @lnames[4]
163
+ end
164
+
165
+ def test_init_special
166
+ assert_equal({}, @levels)
167
+ assert_equal([], @lnames)
168
+ assert_same false, ::Logging.const_defined?(:MAX_LEVEL_LENGTH)
169
+
170
+ assert_raise(ArgumentError) {::Logging.init(1, 2, 3, 4)}
171
+
172
+ ::Logging.init :one, 'two', :THREE, 'FoUr', :sIx
173
+
174
+ assert_equal 5, @levels.length
175
+ assert_equal 5, @lnames.length
176
+ assert_equal 5, ::Logging::MAX_LEVEL_LENGTH
177
+
178
+ assert_equal 0, @levels['one']
179
+ assert_equal 1, @levels['two']
180
+ assert_equal 2, @levels['three']
181
+ assert_equal 3, @levels['four']
182
+ assert_equal 4, @levels['six']
183
+
184
+ assert_equal 'ONE', @lnames[0]
185
+ assert_equal 'TWO', @lnames[1]
186
+ assert_equal 'THREE', @lnames[2]
187
+ assert_equal 'FOUR', @lnames[3]
188
+ assert_equal 'SIX', @lnames[4]
189
+ end
190
+
191
+ def test_init_all_off
192
+ assert_equal({}, @levels)
193
+ assert_equal([], @lnames)
194
+ assert_same false, ::Logging.const_defined?(:MAX_LEVEL_LENGTH)
195
+
196
+ ::Logging.init %w(a b all c off d)
197
+
198
+ assert_equal 4, @levels.length
199
+ assert_equal 4, @lnames.length
200
+ assert_equal 3, ::Logging::MAX_LEVEL_LENGTH
201
+
202
+ assert_equal 0, @levels['a']
203
+ assert_equal 1, @levels['b']
204
+ assert_equal 2, @levels['c']
205
+ assert_equal 3, @levels['d']
206
+
207
+ assert_equal 'A', @lnames[0]
208
+ assert_equal 'B', @lnames[1]
209
+ assert_equal 'C', @lnames[2]
210
+ assert_equal 'D', @lnames[3]
211
+ end
212
+
213
+ def test_format_as
214
+ assert_equal false, ::Logging.const_defined?('OBJ_FORMAT')
215
+
216
+ assert_raises(ArgumentError) {::Logging.format_as 'bob'}
217
+ assert_raises(ArgumentError) {::Logging.format_as String}
218
+ assert_raises(ArgumentError) {::Logging.format_as :what?}
219
+
220
+ remove_const = lambda do |const|
221
+ ::Logging.class_eval {remove_const const if const_defined? const}
222
+ end
223
+
224
+ ::Logging.format_as :string
225
+ assert ::Logging.const_defined?('OBJ_FORMAT')
226
+ assert_equal :string, ::Logging::OBJ_FORMAT
227
+ remove_const[:OBJ_FORMAT]
228
+
229
+ ::Logging.format_as :inspect
230
+ assert ::Logging.const_defined?('OBJ_FORMAT')
231
+ assert_equal :inspect, ::Logging::OBJ_FORMAT
232
+ remove_const[:OBJ_FORMAT]
233
+
234
+ ::Logging.format_as :yaml
235
+ assert ::Logging.const_defined?('OBJ_FORMAT')
236
+ assert_equal :yaml, ::Logging::OBJ_FORMAT
237
+ remove_const[:OBJ_FORMAT]
238
+
239
+ ::Logging.format_as 'string'
240
+ assert ::Logging.const_defined?('OBJ_FORMAT')
241
+ assert_equal :string, ::Logging::OBJ_FORMAT
242
+ remove_const[:OBJ_FORMAT]
243
+
244
+ ::Logging.format_as 'inspect'
245
+ assert ::Logging.const_defined?('OBJ_FORMAT')
246
+ assert_equal :inspect, ::Logging::OBJ_FORMAT
247
+ remove_const[:OBJ_FORMAT]
248
+
249
+ ::Logging.format_as 'yaml'
250
+ assert ::Logging.const_defined?('OBJ_FORMAT')
251
+ assert_equal :yaml, ::Logging::OBJ_FORMAT
252
+ remove_const[:OBJ_FORMAT]
253
+ end
254
+
255
+ def test_path
256
+ path = ::Logging.path(*%w[one two three])
257
+ assert_match %r/one\/two\/three$/, path
258
+ end
259
+
260
+ def test_version
261
+ assert_match %r/\d+\.\d+\.\d+/, ::Logging.version
262
+ end
263
+
264
+ end # class TestLogging
265
+ end # module TestLogging
266
+
267
+ # EOF
@@ -0,0 +1,126 @@
1
+
2
+ require File.join(File.dirname(__FILE__), %w[setup])
3
+
4
+ module TestLogging
5
+
6
+ class TestRepository < Test::Unit::TestCase
7
+ include LoggingTestCase
8
+
9
+ def setup
10
+ super
11
+ @repo = ::Logging::Repository.instance
12
+ end
13
+
14
+ def test_instance
15
+ assert_same @repo, ::Logging::Repository.instance
16
+ end
17
+
18
+ def test_aref
19
+ root = @repo[:root]
20
+ assert_same root, @repo[:root]
21
+
22
+ a = []
23
+ ::Logging::Logger.new a
24
+ assert_same @repo['Array'], @repo[Array]
25
+ assert_same @repo['Array'], @repo[a]
26
+
27
+ assert_not_same @repo['Array'], @repo[:root]
28
+
29
+ ::Logging::Logger.new 'A'
30
+ ::Logging::Logger.new 'A::B'
31
+ assert_not_same @repo['A'], @repo['A::B']
32
+ end
33
+
34
+ def test_aset
35
+ root = @repo[:root]
36
+ @repo[:root] = 'root'
37
+ assert_not_same root, @repo[:root]
38
+
39
+ assert_nil @repo['blah']
40
+ @repo['blah'] = 'root'
41
+ assert_equal 'root', @repo['blah']
42
+ end
43
+
44
+ def test_fetch
45
+ assert @repo.has_logger?(:root)
46
+ assert_same @repo[:root], @repo.fetch(:root)
47
+
48
+ assert !@repo.has_logger?('A')
49
+ assert_raise(KeyError) {@repo.fetch 'A'}
50
+
51
+ %w(A A::B A::B::C::D A::B::C::E A::B::C::F).each do |name|
52
+ ::Logging::Logger.new(name)
53
+ end
54
+
55
+ assert @repo.has_logger?('A')
56
+ assert @repo.has_logger?('A::B')
57
+ end
58
+
59
+ def test_parent
60
+ %w(A A::B A::B::C::D A::B::C::E A::B::C::F).each do |name|
61
+ ::Logging::Logger.new(name)
62
+ end
63
+
64
+ assert_same @repo[:root], @repo.parent('A')
65
+ assert_same @repo['A'], @repo.parent('A::B')
66
+ assert_same @repo['A::B'], @repo.parent('A::B::C')
67
+ assert_same @repo['A::B'], @repo.parent('A::B::C::D')
68
+ assert_same @repo['A::B'], @repo.parent('A::B::C::E')
69
+ assert_same @repo['A::B'], @repo.parent('A::B::C::F')
70
+
71
+ ::Logging::Logger.new('A::B::C')
72
+
73
+ assert_same @repo['A::B'], @repo.parent('A::B::C')
74
+ assert_same @repo['A::B::C'], @repo.parent('A::B::C::D')
75
+ assert_same @repo['A::B::C'], @repo.parent('A::B::C::E')
76
+ assert_same @repo['A::B::C'], @repo.parent('A::B::C::F')
77
+
78
+ ::Logging::Logger.new('A::B::C::E::G')
79
+
80
+ assert_same @repo['A::B::C::E'], @repo.parent('A::B::C::E::G')
81
+
82
+ assert_nil @repo.parent('root')
83
+ end
84
+
85
+ def test_children
86
+ ::Logging::Logger.new('A')
87
+
88
+ assert_equal [], @repo.children('A')
89
+
90
+ ::Logging::Logger.new('A::B')
91
+ a = %w(D E F).map {|name| ::Logging::Logger.new('A::B::C::'+name)}.sort
92
+
93
+ assert_equal [@repo['A::B']], @repo.children('A')
94
+ assert_equal a, @repo.children('A::B')
95
+ assert_equal [], @repo.children('A::B::C')
96
+
97
+ ::Logging::Logger.new('A::B::C')
98
+
99
+ assert_equal [@repo['A::B::C']], @repo.children('A::B')
100
+ assert_equal a, @repo.children('A::B::C')
101
+
102
+ ::Logging::Logger.new('A::B::C::E::G')
103
+
104
+ assert_equal a, @repo.children('A::B::C')
105
+ assert_equal [@repo['A::B::C::E::G']], @repo.children('A::B::C::E')
106
+
107
+ assert_equal [@repo['A'], @repo['Logging']], @repo.children('root')
108
+ end
109
+
110
+ def test_to_key
111
+ assert_equal :root, @repo.to_key(:root)
112
+ assert_equal 'Object', @repo.to_key('Object')
113
+ assert_equal 'Object', @repo.to_key(Object)
114
+ assert_equal 'Object', @repo.to_key(Object.new)
115
+
116
+ assert_equal 'String', @repo.to_key(String)
117
+ assert_equal 'Array', @repo.to_key([])
118
+
119
+ assert_equal 'blah', @repo.to_key('blah')
120
+ assert_equal 'blah', @repo.to_key(:blah)
121
+ end
122
+
123
+ end # class TestRepository
124
+ end # module TestLogging
125
+
126
+ # EOF
@@ -0,0 +1,81 @@
1
+
2
+ require File.join(File.dirname(__FILE__), %w[setup])
3
+
4
+ module TestLogging
5
+
6
+ class TestRootLogger < Test::Unit::TestCase
7
+ include LoggingTestCase
8
+
9
+ def setup
10
+ super
11
+ @root = ::Logging::Logger.root
12
+ end
13
+
14
+ def test_additive
15
+ assert_raise(NoMethodError) {@root.additive}
16
+ end
17
+
18
+ def test_additive_eq
19
+ assert_raise(NoMethodError) {@root.additive = true}
20
+ end
21
+
22
+ def test_level_eq
23
+ assert_equal 0, @root.level
24
+
25
+ assert_raise(ArgumentError) {@root.level = -1}
26
+ assert_raise(ArgumentError) {@root.level = 6}
27
+ assert_raise(ArgumentError) {@root.level = Object}
28
+ assert_raise(ArgumentError) {@root.level = 'bob'}
29
+ assert_raise(ArgumentError) {@root.level = :wtf}
30
+
31
+ @root.level = 'INFO'
32
+ assert_equal 1, @root.level
33
+
34
+ @root.level = :warn
35
+ assert_equal 2, @root.level
36
+
37
+ @root.level = 'error'
38
+ assert_equal 3, @root.level
39
+
40
+ @root.level = 4
41
+ assert_equal 4, @root.level
42
+
43
+ @root.level = :all
44
+ assert_equal 0, @root.level
45
+
46
+ @root.level = 'OFF'
47
+ assert_equal 5, @root.level
48
+
49
+ @root.level = nil
50
+ assert_equal 0, @root.level
51
+ end
52
+
53
+ def test_name
54
+ assert_equal 'root', @root.name
55
+ end
56
+
57
+ def test_parent
58
+ assert_raise(NoMethodError) {@root.parent}
59
+ end
60
+
61
+ def test_parent_eq
62
+ assert_raise(NoMethodError) {@root.parent = nil}
63
+ end
64
+
65
+ def test_spaceship
66
+ logs = %w(
67
+ A A::B A::B::C A::B::C::D A::B::C::E A::B::C::E::G A::B::C::F
68
+ ).map {|x| ::Logging::Logger[x]}
69
+
70
+ logs.each do |log|
71
+ assert_equal(-1, @root <=> log, "'root' <=> '#{log.name}'")
72
+ end
73
+
74
+ assert_equal 0, @root <=> @root
75
+ assert_raise(ArgumentError) {@root <=> 'string'}
76
+ end
77
+
78
+ end # class TestRootLogger
79
+ end # module TestLogging
80
+
81
+ # EOF