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