filterfish-logging 0.9.8

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