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,274 @@
1
+
2
+ require File.join(File.dirname(__FILE__), %w[setup])
3
+
4
+ module TestLogging
5
+ module TestStats
6
+
7
+ class TestSampler < Test::Unit::TestCase
8
+ include LoggingTestCase
9
+
10
+ def setup
11
+ super
12
+ @sampler = ::Logging::Stats::Sampler.new('test')
13
+ end
14
+
15
+ def test_reset
16
+ (1..10).each {|n| @sampler.sample n}
17
+
18
+ assert_equal 55, @sampler.sum
19
+ assert_equal 385, @sampler.sumsq
20
+ assert_equal 10, @sampler.num
21
+ assert_equal 1, @sampler.min
22
+ assert_equal 10, @sampler.max
23
+ assert_equal 10, @sampler.last
24
+
25
+ @sampler.reset
26
+
27
+ assert_equal 0, @sampler.sum
28
+ assert_equal 0, @sampler.sumsq
29
+ assert_equal 0, @sampler.num
30
+ assert_equal 0, @sampler.min
31
+ assert_equal 0, @sampler.max
32
+ assert_nil @sampler.last
33
+ end
34
+
35
+ def test_coalesce
36
+ other = ::Logging::Stats::Sampler.new('other')
37
+ (1..5).each {|n| other.sample n}
38
+ (6..10).each {|n| @sampler.sample n}
39
+
40
+ assert_equal 5, @sampler.num
41
+
42
+ @sampler.coalesce other
43
+
44
+ assert_equal 55, @sampler.sum
45
+ assert_equal 385, @sampler.sumsq
46
+ assert_equal 10, @sampler.num
47
+ assert_equal 1, @sampler.min
48
+ assert_equal 10, @sampler.max
49
+ assert_equal 5, @sampler.last
50
+
51
+ @sampler.coalesce ::Logging::Stats::Sampler.new('tmp')
52
+
53
+ assert_equal 55, @sampler.sum
54
+ assert_equal 385, @sampler.sumsq
55
+ assert_equal 10, @sampler.num
56
+ assert_equal 1, @sampler.min
57
+ assert_equal 10, @sampler.max
58
+ assert_equal 5, @sampler.last
59
+ end
60
+
61
+ def test_sample
62
+ @sampler.sample 1
63
+
64
+ assert_equal 1, @sampler.sum
65
+ assert_equal 1, @sampler.sumsq
66
+ assert_equal 1, @sampler.num
67
+ assert_equal 1, @sampler.min
68
+ assert_equal 1, @sampler.max
69
+ assert_equal 1, @sampler.last
70
+
71
+ @sampler.sample 2
72
+
73
+ assert_equal 3, @sampler.sum
74
+ assert_equal 5, @sampler.sumsq
75
+ assert_equal 2, @sampler.num
76
+ assert_equal 1, @sampler.min
77
+ assert_equal 2, @sampler.max
78
+ assert_equal 2, @sampler.last
79
+ end
80
+
81
+ def test_to_s
82
+ (1..10).each {|n| @sampler.sample n}
83
+ assert_equal(
84
+ "[test]: SUM=55.000000, SUMSQ=385.000000, NUM=10, MEAN=5.500000, SD=3.027650, MIN=1.000000, MAX=10.000000",
85
+ @sampler.to_s
86
+ )
87
+ end
88
+
89
+ def test_to_a
90
+ (1..10).each {|n| @sampler.sample n}
91
+ assert_equal(
92
+ ['test', 55, 385, 10, 5.5, @sampler.sd, 1, 10],
93
+ @sampler.to_a
94
+ )
95
+ end
96
+
97
+ def test_to_hash
98
+ (1..10).each {|n| @sampler.sample n}
99
+ assert_equal(
100
+ {:name => 'test', :sum => 55, :sumsq => 385, :num => 10, :mean => 5.5, :sd => @sampler.sd, :min => 1, :max => 10},
101
+ @sampler.to_hash
102
+ )
103
+ end
104
+
105
+ def test_mean
106
+ assert_equal 0, @sampler.mean
107
+
108
+ @sampler.sample 10
109
+ assert_equal 10, @sampler.mean
110
+
111
+ @sampler.sample 20
112
+ assert_equal 15, @sampler.mean
113
+ end
114
+
115
+ def test_sd
116
+ assert_equal 0, @sampler.sd
117
+
118
+ @sampler.sample 1
119
+ assert_equal 0, @sampler.sd
120
+
121
+ @sampler.sample 2
122
+ assert_in_delta 0.707106781186548, @sampler.sd, 1e-10
123
+
124
+ @sampler.sample 3
125
+ assert_in_delta 1.0, @sampler.sd, 1e-10
126
+
127
+ @sampler.sample 4
128
+ assert_in_delta 1.29099444873581, @sampler.sd, 1e-10
129
+ end
130
+
131
+ def test_mark_and_tick
132
+ 10.times do
133
+ @sampler.mark
134
+ sleep 0.01
135
+ @sampler.tick
136
+ end
137
+
138
+ assert_equal 10, @sampler.num
139
+ assert_in_delta 0.01, @sampler.mean, 1e-3
140
+ end
141
+ end # class TestSampler
142
+
143
+ class TestTracker < Test::Unit::TestCase
144
+ include LoggingTestCase
145
+
146
+ def setup
147
+ super
148
+ @tracker = ::Logging::Stats::Tracker.new
149
+ @stats = @tracker.stats
150
+ end
151
+
152
+ def test_coalesce
153
+ 1.times {|n| @tracker.sample('foo', n)}
154
+ 2.times {|n| @tracker.sample('bar', n)}
155
+ 3.times {|n| @tracker.sample('baz', n)}
156
+
157
+ assert_equal %w[bar baz foo], @stats.keys.sort
158
+ assert_equal 1, @stats['foo'].num
159
+ assert_equal 2, @stats['bar'].num
160
+ assert_equal 3, @stats['baz'].num
161
+
162
+ # when other is empty, nothing should change in our tracker
163
+ other = ::Logging::Stats::Tracker.new
164
+ @tracker.coalesce other
165
+
166
+ assert_equal %w[bar baz foo], @stats.keys.sort
167
+ assert_equal 1, @stats['foo'].num
168
+ assert_equal 2, @stats['bar'].num
169
+ assert_equal 3, @stats['baz'].num
170
+
171
+ # now add some samples to other
172
+ 4.times {|n| other.sample('buz', n)}
173
+ 5.times {|n| other.sample('bar', n)}
174
+ @tracker.coalesce other
175
+
176
+ assert_equal %w[bar baz buz foo], @stats.keys.sort
177
+ assert_equal 1, @stats['foo'].num
178
+ assert_equal 7, @stats['bar'].num
179
+ assert_equal 3, @stats['baz'].num
180
+ assert_equal 4, @stats['buz'].num
181
+ end
182
+
183
+ def test_mark
184
+ assert @stats.empty?
185
+ @tracker.mark 'foo'
186
+ assert !@stats.empty?
187
+
188
+ sampler = @stats['foo']
189
+ assert_equal 0, sampler.num
190
+ end
191
+
192
+ def test_tick
193
+ assert @stats.empty?
194
+ @tracker.tick 'foo'
195
+ assert !@stats.empty?
196
+
197
+ sampler = @stats['foo']
198
+ assert_equal 1, sampler.num
199
+ end
200
+
201
+ def test_sample
202
+ assert @stats.empty?
203
+ @tracker.sample 'foo', 1
204
+ assert !@stats.empty?
205
+
206
+ sampler = @stats['foo']
207
+ assert_equal 1, sampler.num
208
+ assert_equal 1, sampler.last
209
+
210
+ @tracker.sample 'foo', 2
211
+ assert_equal 2, sampler.num
212
+ assert_equal 2, sampler.last
213
+ assert_equal 3, sampler.sum
214
+ end
215
+
216
+ def test_time
217
+ assert @stats.empty?
218
+ @tracker.time('foo') {sleep 0.05}
219
+ assert !@stats.empty?
220
+
221
+ sampler = @stats['foo']
222
+ assert_equal 1, sampler.num
223
+ assert_in_delta 0.05, sampler.sum, 1e-2
224
+
225
+ @tracker.time('foo') {sleep 0.05}
226
+ assert_equal 2, sampler.num
227
+ assert_in_delta 0.10, sampler.sum, 1e-2
228
+
229
+ assert_raise(RuntimeError) do
230
+ @tracker.time('foo') {raise 'Uh Oh!'}
231
+ end
232
+ assert_equal 3, sampler.num
233
+ end
234
+
235
+ def test_reset
236
+ 1.times {|n| @tracker.sample('foo', n)}
237
+ 2.times {|n| @tracker.sample('bar', n)}
238
+ 3.times {|n| @tracker.sample('baz', n)}
239
+
240
+ assert_equal 1, @stats['foo'].num
241
+ assert_equal 2, @stats['bar'].num
242
+ assert_equal 3, @stats['baz'].num
243
+
244
+ @tracker.reset
245
+
246
+ assert_equal 0, @stats['foo'].num
247
+ assert_equal 0, @stats['bar'].num
248
+ assert_equal 0, @stats['baz'].num
249
+ end
250
+
251
+ def test_reentrant_synchronization
252
+ assert_nothing_raised do
253
+ @tracker.sync {
254
+ @tracker.sample('foo', Math::PI)
255
+ @tracker.reset
256
+ }
257
+ end
258
+ end
259
+
260
+ def test_periodically_run
261
+ @tracker.periodically_run(0.1) {
262
+ @tracker.tick 'foo'
263
+ }
264
+ sleep 0.5
265
+ @tracker.stop
266
+
267
+ assert(@stats['foo'].num > 1)
268
+ end
269
+ end # class TestTracker
270
+
271
+ end # module TestStats
272
+ end # module TestLogging
273
+
274
+ # EOF
@@ -0,0 +1,116 @@
1
+
2
+ require File.join(File.dirname(__FILE__), %w[setup])
3
+
4
+ module TestLogging
5
+
6
+ class TestUtils < Test::Unit::TestCase
7
+
8
+ def test_hash_getopt
9
+ opts = {
10
+ :foo => 'foo_value',
11
+ 'bar' => 'bar_value',
12
+ 'one' => '1',
13
+ :two => '2',
14
+ :three => 3.0
15
+ }
16
+
17
+ assert_equal('foo_value', opts.getopt(:foo))
18
+ assert_equal('foo_value', opts.getopt('foo'))
19
+ assert_equal(:foo_value, opts.getopt(:foo, :as => Symbol))
20
+
21
+ assert_equal('bar_value', opts.getopt(:bar))
22
+ assert_equal('bar_value', opts.getopt('bar'))
23
+
24
+ assert_equal('1', opts.getopt(:one))
25
+ assert_equal(1, opts.getopt('one', :as => Integer))
26
+ assert_instance_of(Float, opts.getopt('one', :as => Float))
27
+
28
+ assert_equal('2', opts.getopt(:two))
29
+ assert_equal(['2'], opts.getopt(:two, :as => Array))
30
+
31
+ assert_equal(3.0, opts.getopt(:three))
32
+ assert_equal('3.0', opts.getopt('three', :as => String))
33
+
34
+ assert_equal(nil, opts.getopt(:baz))
35
+ assert_equal('default', opts.getopt('baz', 'default'))
36
+ assert_equal(:default, opts.getopt(:key, 'default', :as => Symbol))
37
+ assert_equal(['default'], opts.getopt('key', 'default', :as => Array))
38
+
39
+ assert_equal(3.0, opts.getopt(:three, :as => Object))
40
+
41
+ assert_nil opts.getopt(:key, :as => Symbol)
42
+ end
43
+
44
+ def test_string_reduce
45
+ str = 'this is the foobar string'
46
+ len = str.length
47
+
48
+ r = str.reduce(len + 1)
49
+ assert_same str, r
50
+
51
+ r = str.reduce(len)
52
+ assert_same str, r
53
+
54
+ r = str.reduce(len - 1)
55
+ assert_equal 'this is the...bar string', r
56
+
57
+ r = str.reduce(len - 10)
58
+ assert_equal 'this i...string', r
59
+
60
+ r = str.reduce(4)
61
+ assert_equal 't...', r
62
+
63
+ r = str.reduce(3)
64
+ assert_equal '...', r
65
+
66
+ r = str.reduce(0)
67
+ assert_equal '...', r
68
+
69
+ assert_raises(ArgumentError) { str.reduce(-1) }
70
+
71
+ r = str.reduce(len - 1, '##')
72
+ assert_equal 'this is the##obar string', r
73
+
74
+ r = str.reduce(len - 10, '##')
75
+ assert_equal 'this is##string', r
76
+
77
+ r = str.reduce(4, '##')
78
+ assert_equal 't##g', r
79
+
80
+ r = str.reduce(3, '##')
81
+ assert_equal 't##', r
82
+
83
+ r = str.reduce(0, '##')
84
+ assert_equal '##', r
85
+ end
86
+
87
+ def test_logger_name
88
+ assert_equal 'Array', Array.logger_name
89
+
90
+ # some lines are commented out for compatibility with ruby 1.9
91
+
92
+ c = Class.new(Array)
93
+ # assert_equal '', c.name
94
+ assert_equal 'Array', c.logger_name
95
+
96
+ meta = class << Array; self; end
97
+ # assert_equal '', meta.name
98
+ assert_equal 'Array', meta.logger_name
99
+
100
+ m = Module.new
101
+ # assert_equal '', m.name
102
+ assert_equal 'anonymous', m.logger_name
103
+
104
+ c = Class.new(::Logging::Logger)
105
+ # assert_equal '', c.name
106
+ assert_equal 'Logging::Logger', c.logger_name
107
+
108
+ meta = class << ::Logging::Logger; self; end
109
+ # assert_equal '', meta.name
110
+ assert_equal 'Logging::Logger', meta.logger_name
111
+ end
112
+
113
+ end # class TestUtils
114
+ end # module TestLogging
115
+
116
+ # EOF
data/version.txt ADDED
@@ -0,0 +1 @@
1
+ 1.4.2
metadata ADDED
@@ -0,0 +1,227 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: sgeorgi-logging
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 1
7
+ - 4
8
+ - 2
9
+ version: 1.4.2
10
+ platform: ruby
11
+ authors:
12
+ - Tim Pease
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-05-30 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies:
20
+ - !ruby/object:Gem::Dependency
21
+ name: little-plugger
22
+ prerelease: false
23
+ requirement: &id001 !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ segments:
28
+ - 1
29
+ - 1
30
+ - 2
31
+ version: 1.1.2
32
+ type: :runtime
33
+ version_requirements: *id001
34
+ - !ruby/object:Gem::Dependency
35
+ name: flexmock
36
+ prerelease: false
37
+ requirement: &id002 !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ segments:
42
+ - 0
43
+ - 8
44
+ - 6
45
+ version: 0.8.6
46
+ type: :development
47
+ version_requirements: *id002
48
+ - !ruby/object:Gem::Dependency
49
+ name: bones-git
50
+ prerelease: false
51
+ requirement: &id003 !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ segments:
56
+ - 0
57
+ version: "0"
58
+ type: :development
59
+ version_requirements: *id003
60
+ - !ruby/object:Gem::Dependency
61
+ name: bones-extras
62
+ prerelease: false
63
+ requirement: &id004 !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ segments:
68
+ - 0
69
+ version: "0"
70
+ type: :development
71
+ version_requirements: *id004
72
+ - !ruby/object:Gem::Dependency
73
+ name: bones
74
+ prerelease: false
75
+ requirement: &id005 !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ segments:
80
+ - 3
81
+ - 4
82
+ - 3
83
+ version: 3.4.3
84
+ type: :development
85
+ version_requirements: *id005
86
+ description: |-
87
+ Logging is a flexible logging library for use in Ruby programs based on the
88
+ design of Java's log4j library. It features a hierarchical logging system,
89
+ custom level names, multiple output destinations per log event, custom
90
+ formatting, and more.
91
+ email: tim.pease@gmail.com
92
+ executables: []
93
+
94
+ extensions: []
95
+
96
+ extra_rdoc_files:
97
+ - History.txt
98
+ - README.rdoc
99
+ - version.txt
100
+ files:
101
+ - History.txt
102
+ - README.rdoc
103
+ - Rakefile
104
+ - data/bad_logging_1.rb
105
+ - data/bad_logging_2.rb
106
+ - data/logging.rb
107
+ - data/logging.yaml
108
+ - data/simple_logging.rb
109
+ - examples/appenders.rb
110
+ - examples/classes.rb
111
+ - examples/consolidation.rb
112
+ - examples/fork.rb
113
+ - examples/formatting.rb
114
+ - examples/hierarchies.rb
115
+ - examples/layouts.rb
116
+ - examples/loggers.rb
117
+ - examples/names.rb
118
+ - examples/simple.rb
119
+ - lib/logging.rb
120
+ - lib/logging/appender.rb
121
+ - lib/logging/appenders.rb
122
+ - lib/logging/appenders/buffering.rb
123
+ - lib/logging/appenders/console.rb
124
+ - lib/logging/appenders/email.rb
125
+ - lib/logging/appenders/file.rb
126
+ - lib/logging/appenders/growl.rb
127
+ - lib/logging/appenders/io.rb
128
+ - lib/logging/appenders/rolling_file.rb
129
+ - lib/logging/appenders/string_io.rb
130
+ - lib/logging/appenders/syslog.rb
131
+ - lib/logging/config/configurator.rb
132
+ - lib/logging/config/yaml_configurator.rb
133
+ - lib/logging/layout.rb
134
+ - lib/logging/layouts.rb
135
+ - lib/logging/layouts/basic.rb
136
+ - lib/logging/layouts/parseable.rb
137
+ - lib/logging/layouts/pattern.rb
138
+ - lib/logging/log_event.rb
139
+ - lib/logging/logger.rb
140
+ - lib/logging/repository.rb
141
+ - lib/logging/root_logger.rb
142
+ - lib/logging/stats.rb
143
+ - lib/logging/utils.rb
144
+ - lib/spec/logging_helper.rb
145
+ - test/appenders/test_buffered_io.rb
146
+ - test/appenders/test_console.rb
147
+ - test/appenders/test_email.rb
148
+ - test/appenders/test_file.rb
149
+ - test/appenders/test_growl.rb
150
+ - test/appenders/test_io.rb
151
+ - test/appenders/test_rolling_file.rb
152
+ - test/appenders/test_syslog.rb
153
+ - test/benchmark.rb
154
+ - test/config/test_configurator.rb
155
+ - test/config/test_yaml_configurator.rb
156
+ - test/layouts/test_basic.rb
157
+ - test/layouts/test_json.rb
158
+ - test/layouts/test_pattern.rb
159
+ - test/layouts/test_yaml.rb
160
+ - test/setup.rb
161
+ - test/test_appender.rb
162
+ - test/test_consolidate.rb
163
+ - test/test_layout.rb
164
+ - test/test_log_event.rb
165
+ - test/test_logger.rb
166
+ - test/test_logging.rb
167
+ - test/test_repository.rb
168
+ - test/test_root_logger.rb
169
+ - test/test_stats.rb
170
+ - test/test_utils.rb
171
+ - version.txt
172
+ has_rdoc: true
173
+ homepage: http://rubygems.org/gems/logging
174
+ licenses: []
175
+
176
+ post_install_message:
177
+ rdoc_options:
178
+ - --main
179
+ - README.rdoc
180
+ require_paths:
181
+ - lib
182
+ required_ruby_version: !ruby/object:Gem::Requirement
183
+ requirements:
184
+ - - ">="
185
+ - !ruby/object:Gem::Version
186
+ segments:
187
+ - 0
188
+ version: "0"
189
+ required_rubygems_version: !ruby/object:Gem::Requirement
190
+ requirements:
191
+ - - ">="
192
+ - !ruby/object:Gem::Version
193
+ segments:
194
+ - 0
195
+ version: "0"
196
+ requirements: []
197
+
198
+ rubyforge_project: logging
199
+ rubygems_version: 1.3.6
200
+ signing_key:
201
+ specification_version: 3
202
+ summary: A flexible and extendable logging library for Ruby
203
+ test_files:
204
+ - test/layouts/test_pattern.rb
205
+ - test/layouts/test_basic.rb
206
+ - test/layouts/test_json.rb
207
+ - test/layouts/test_yaml.rb
208
+ - test/test_logger.rb
209
+ - test/test_log_event.rb
210
+ - test/test_repository.rb
211
+ - test/config/test_yaml_configurator.rb
212
+ - test/config/test_configurator.rb
213
+ - test/test_appender.rb
214
+ - test/test_root_logger.rb
215
+ - test/appenders/test_console.rb
216
+ - test/appenders/test_buffered_io.rb
217
+ - test/appenders/test_io.rb
218
+ - test/appenders/test_file.rb
219
+ - test/appenders/test_rolling_file.rb
220
+ - test/appenders/test_syslog.rb
221
+ - test/appenders/test_email.rb
222
+ - test/appenders/test_growl.rb
223
+ - test/test_logging.rb
224
+ - test/test_layout.rb
225
+ - test/test_utils.rb
226
+ - test/test_consolidate.rb
227
+ - test/test_stats.rb