logging 0.1.0 → 0.2.0
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.
- data/examples/logging.yaml +63 -0
- data/lib/logging.rb +23 -2
- data/lib/logging/appender.rb +9 -7
- data/lib/logging/appenders/console.rb +13 -9
- data/lib/logging/appenders/file.rb +25 -23
- data/lib/logging/appenders/io.rb +4 -8
- data/lib/logging/appenders/rolling_file.rb +189 -0
- data/lib/logging/config/yaml_configurator.rb +190 -0
- data/lib/logging/layout.rb +10 -8
- data/lib/logging/layouts/pattern.rb +7 -9
- data/lib/logging/logger.rb +37 -7
- data/test/appenders/test_console.rb +7 -7
- data/test/appenders/test_file.rb +20 -10
- data/test/appenders/test_rolling_file.rb +141 -0
- data/test/config/test_yaml_configurator.rb +47 -0
- data/test/layouts/test_pattern.rb +2 -2
- data/test/setup.rb +3 -1
- data/test/test_layout.rb +7 -7
- data/test/test_log_event.rb +3 -3
- data/test/test_logger.rb +37 -1
- data/test/test_logging.rb +82 -2
- data/test/test_root_logger.rb +17 -1
- metadata +7 -2
@@ -0,0 +1,141 @@
|
|
1
|
+
# $Id: test_rolling_file.rb 22 2007-01-29 16:20:54Z tim_pease $
|
2
|
+
|
3
|
+
require 'test/setup.rb'
|
4
|
+
require 'fileutils'
|
5
|
+
|
6
|
+
module TestLogging
|
7
|
+
module TestAppenders
|
8
|
+
|
9
|
+
class TestRollingFile < Test::Unit::TestCase
|
10
|
+
include LoggingTestCase
|
11
|
+
|
12
|
+
TMP = 'tmp'
|
13
|
+
|
14
|
+
def setup
|
15
|
+
super
|
16
|
+
FileUtils.rm_rf TMP if File.exist?(TMP)
|
17
|
+
FileUtils.mkdir(TMP)
|
18
|
+
@fn = File.join(TMP, 'test.log')
|
19
|
+
@fn_fmt = File.join(TMP, 'test.%d.log')
|
20
|
+
@glob = File.join(TMP, '*.log')
|
21
|
+
end
|
22
|
+
|
23
|
+
def teardown
|
24
|
+
FileUtils.rm_rf TMP
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_initialize
|
28
|
+
assert_equal [], Dir.glob(@glob)
|
29
|
+
|
30
|
+
# create a new appender
|
31
|
+
ap = ::Logging::Appenders::RollingFile.new('test', :filename => @fn)
|
32
|
+
assert File.exist?(@fn)
|
33
|
+
assert_equal 0, File.size(@fn)
|
34
|
+
|
35
|
+
ap << "Just a line of text\n" # 20 bytes
|
36
|
+
ap.flush
|
37
|
+
assert_equal 20, File.size(@fn)
|
38
|
+
ap.close
|
39
|
+
|
40
|
+
# make sure we append to the current file (not truncate)
|
41
|
+
ap = ::Logging::Appenders::RollingFile.new('test', :filename => @fn)
|
42
|
+
assert_equal [@fn], Dir.glob(@glob)
|
43
|
+
assert_equal 20, File.size(@fn)
|
44
|
+
|
45
|
+
ap << "Just another line of text\n" # 26 bytes
|
46
|
+
ap.flush
|
47
|
+
assert_equal 46, File.size(@fn)
|
48
|
+
ap.close
|
49
|
+
|
50
|
+
# setting the truncate option to true should roll the current log file
|
51
|
+
# and create a new one
|
52
|
+
ap = ::Logging::Appenders::RollingFile.new('test',
|
53
|
+
:filename => @fn, :truncate => true)
|
54
|
+
|
55
|
+
log1 = sprintf(@fn_fmt, 1)
|
56
|
+
assert_equal [log1, @fn], Dir.glob(@glob).sort
|
57
|
+
assert_equal 0, File.size(@fn)
|
58
|
+
assert_equal 46, File.size(log1)
|
59
|
+
|
60
|
+
ap << "Some more text in the new file\n" # 31 bytes
|
61
|
+
ap.flush
|
62
|
+
assert_equal 31, File.size(@fn)
|
63
|
+
ap.close
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_keep
|
67
|
+
assert_equal [], Dir.glob(@glob)
|
68
|
+
|
69
|
+
(1..12).each do |cnt|
|
70
|
+
name = sprintf(@fn_fmt, cnt)
|
71
|
+
File.open(name,'w') {|fd| fd.write 'X'*cnt}
|
72
|
+
end
|
73
|
+
FileUtils.touch(@fn)
|
74
|
+
|
75
|
+
# keep only five files
|
76
|
+
ap = ::Logging::Appenders::RollingFile.new('test',
|
77
|
+
:filename => @fn, :keep => 5)
|
78
|
+
|
79
|
+
# we still have 13 files because we did not truncate the log file,
|
80
|
+
# and hence, we did not roll all the log files
|
81
|
+
assert_equal 13, Dir.glob(@glob).length
|
82
|
+
|
83
|
+
# force the appender to roll the files
|
84
|
+
ap.send :roll
|
85
|
+
assert_equal 6, Dir.glob(@glob).length
|
86
|
+
|
87
|
+
(1..5).each do |cnt|
|
88
|
+
name = sprintf(@fn_fmt, cnt)
|
89
|
+
assert_equal cnt-1, File.size(name)
|
90
|
+
end
|
91
|
+
ap.close
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_max_age
|
95
|
+
assert_equal [], Dir.glob(@glob)
|
96
|
+
|
97
|
+
ap = ::Logging::Appenders::RollingFile.new('test',
|
98
|
+
:filename => @fn, :max_age => 1)
|
99
|
+
|
100
|
+
ap << "random message\n"
|
101
|
+
assert_equal 1, Dir.glob(@glob).length
|
102
|
+
|
103
|
+
sleep 1
|
104
|
+
ap << "another random message\n"
|
105
|
+
assert_equal 2, Dir.glob(@glob).length
|
106
|
+
|
107
|
+
ap.close
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_max_size
|
111
|
+
assert_equal [], Dir.glob(@glob)
|
112
|
+
|
113
|
+
ap = ::Logging::Appenders::RollingFile.new('test',
|
114
|
+
:filename => @fn, :max_size => 100)
|
115
|
+
|
116
|
+
ap << 'X' * 100; ap.flush
|
117
|
+
assert_equal 1, Dir.glob(@glob).length
|
118
|
+
assert_equal 100, File.size(@fn)
|
119
|
+
|
120
|
+
# this character is appended to the log file (bringing its size to 101)
|
121
|
+
# and THEN the file is rolled resulting in a new, empty log file
|
122
|
+
ap << 'X'
|
123
|
+
assert_equal 2, Dir.glob(@glob).length
|
124
|
+
assert_equal 0, File.size(@fn)
|
125
|
+
|
126
|
+
ap << 'X' * 100; ap.flush
|
127
|
+
assert_equal 2, Dir.glob(@glob).length
|
128
|
+
assert_equal 100, File.size(@fn)
|
129
|
+
|
130
|
+
ap << 'X'
|
131
|
+
assert_equal 3, Dir.glob(@glob).length
|
132
|
+
assert_equal 0, File.size(@fn)
|
133
|
+
|
134
|
+
ap.close
|
135
|
+
end
|
136
|
+
|
137
|
+
end # class TestRollingFile
|
138
|
+
end # module TestAppenders
|
139
|
+
end # module TestLogging
|
140
|
+
|
141
|
+
# EOF
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# $Id: test_yaml_configurator.rb 22 2007-01-29 16:20:54Z tim_pease $
|
2
|
+
|
3
|
+
require 'stringio'
|
4
|
+
require 'yaml'
|
5
|
+
require 'test/setup.rb'
|
6
|
+
|
7
|
+
module TestLogging
|
8
|
+
module TestConfig
|
9
|
+
|
10
|
+
class TestYamlConfigurator < Test::Unit::TestCase
|
11
|
+
include LoggingTestCase
|
12
|
+
|
13
|
+
def setup
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_class_load
|
18
|
+
assert_raise(::Logging::Config::YamlConfigurator::Error) {
|
19
|
+
::Logging::Config::YamlConfigurator.load(Object.new)
|
20
|
+
}
|
21
|
+
|
22
|
+
begin
|
23
|
+
fd = File.open('examples/logging.yaml','r')
|
24
|
+
assert_nothing_raised {
|
25
|
+
::Logging::Config::YamlConfigurator.load(fd)
|
26
|
+
}
|
27
|
+
ensure
|
28
|
+
fd.close
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_initialize
|
33
|
+
io = StringIO.new
|
34
|
+
io << YAML.dump({:one => 1, :two => 2, :three => 3})
|
35
|
+
io.seek 0
|
36
|
+
|
37
|
+
assert_raise(::Logging::Config::YamlConfigurator::Error) {
|
38
|
+
::Logging::Config::YamlConfigurator.new(io)
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
end # class TestYamlConfigurator
|
43
|
+
|
44
|
+
end # module TestConfig
|
45
|
+
end # module TestLogging
|
46
|
+
|
47
|
+
# EOF
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_pattern.rb
|
1
|
+
# $Id: test_pattern.rb 17 2007-01-20 18:47:43Z tim_pease $
|
2
2
|
|
3
3
|
require 'test/setup.rb'
|
4
4
|
|
@@ -138,7 +138,7 @@ module TestLayouts
|
|
138
138
|
assert_match %r/\A\d+\z/, @layout.format(event)
|
139
139
|
|
140
140
|
@layout.pattern = '%t'
|
141
|
-
assert_match %r/\A
|
141
|
+
assert_match %r/\A-?\d+\z/, @layout.format(event)
|
142
142
|
|
143
143
|
@layout.pattern = '%%'
|
144
144
|
assert_equal '%', @layout.format(event)
|
data/test/setup.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: setup.rb
|
1
|
+
# $Id: setup.rb 22 2007-01-29 16:20:54Z tim_pease $
|
2
2
|
|
3
3
|
require 'test/unit'
|
4
4
|
|
@@ -37,6 +37,8 @@ module TestLogging
|
|
37
37
|
define_method(:instance, nonce::FirstInstanceCall)
|
38
38
|
end
|
39
39
|
end
|
40
|
+
|
41
|
+
::Logging::Appender.instance_variable_get(:@appenders).clear
|
40
42
|
end
|
41
43
|
|
42
44
|
end # module LoggingTestCase
|
data/test/test_layout.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_layout.rb
|
1
|
+
# $Id: test_layout.rb 17 2007-01-20 18:47:43Z tim_pease $
|
2
2
|
|
3
3
|
require 'test/setup.rb'
|
4
4
|
|
@@ -21,13 +21,13 @@ module TestLogging
|
|
21
21
|
|
22
22
|
assert_equal :string, obj_format[@layout]
|
23
23
|
|
24
|
-
@layout = ::Logging::Layout.new 'blah'
|
24
|
+
@layout = ::Logging::Layout.new 'format_as' => 'blah'
|
25
25
|
assert_equal :string, obj_format[@layout]
|
26
26
|
|
27
|
-
@layout = ::Logging::Layout.new :inspect
|
27
|
+
@layout = ::Logging::Layout.new :format_as => :inspect
|
28
28
|
assert_equal :inspect, obj_format[@layout]
|
29
29
|
|
30
|
-
@layout = ::Logging::Layout.new :yaml
|
30
|
+
@layout = ::Logging::Layout.new 'format_as' => :yaml
|
31
31
|
assert_equal :yaml, obj_format[@layout]
|
32
32
|
|
33
33
|
@layout = ::Logging::Layout.new
|
@@ -70,16 +70,16 @@ module TestLogging
|
|
70
70
|
assert_equal '<Array> 1234', r
|
71
71
|
|
72
72
|
obj = %w( one two three four )
|
73
|
-
@layout = ::Logging::Layout.new :inspect
|
73
|
+
@layout = ::Logging::Layout.new :format_as => :inspect
|
74
74
|
r = @layout.send :format_obj, obj
|
75
75
|
assert_equal '<Array> ["one", "two", "three", "four"]', r
|
76
76
|
|
77
|
-
@layout = ::Logging::Layout.new :yaml
|
77
|
+
@layout = ::Logging::Layout.new :format_as => :yaml
|
78
78
|
r = @layout.send :format_obj, obj
|
79
79
|
assert_equal "<Array> \n--- \n- one\n- two\n- three\n- four\n", r
|
80
80
|
end
|
81
81
|
|
82
|
-
end # class
|
82
|
+
end # class TestLayout
|
83
83
|
end # module TestLogging
|
84
84
|
|
85
85
|
# EOF
|
data/test/test_log_event.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
|
-
# $Id: test_log_event.rb
|
1
|
+
# $Id: test_log_event.rb 22 2007-01-29 16:20:54Z tim_pease $
|
2
2
|
|
3
3
|
require 'test/setup.rb'
|
4
4
|
|
5
5
|
module TestLogging
|
6
6
|
|
7
|
-
class
|
7
|
+
class TestLogEvent < Test::Unit::TestCase
|
8
8
|
include LoggingTestCase
|
9
9
|
|
10
10
|
def setup
|
@@ -69,7 +69,7 @@ module TestLogging
|
|
69
69
|
assert_equal 'test_method', @appender.event.method
|
70
70
|
end
|
71
71
|
|
72
|
-
end # class
|
72
|
+
end # class TestLogEvent
|
73
73
|
|
74
74
|
class EventAppender < ::Logging::Appender
|
75
75
|
attr_reader :event
|
data/test/test_logger.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_logger.rb
|
1
|
+
# $Id: test_logger.rb 22 2007-01-29 16:20:54Z tim_pease $
|
2
2
|
|
3
3
|
require 'test/setup.rb'
|
4
4
|
require 'stringio'
|
@@ -69,6 +69,20 @@ module TestLogging
|
|
69
69
|
|
70
70
|
log.additive = false
|
71
71
|
assert_equal false, log.additive
|
72
|
+
|
73
|
+
log.additive = true
|
74
|
+
assert_equal true, log.additive
|
75
|
+
|
76
|
+
log.additive = 'false'
|
77
|
+
assert_equal false, log.additive
|
78
|
+
|
79
|
+
log.additive = 'true'
|
80
|
+
assert_equal true, log.additive
|
81
|
+
|
82
|
+
log.additive = nil
|
83
|
+
assert_equal true, log.additive
|
84
|
+
|
85
|
+
assert_raise(ArgumentError) {log.additive = Object}
|
72
86
|
end
|
73
87
|
|
74
88
|
def test_appenders_eq
|
@@ -444,6 +458,28 @@ module TestLogging
|
|
444
458
|
assert_equal true, log.trace
|
445
459
|
end
|
446
460
|
|
461
|
+
def test_trace_eq
|
462
|
+
log = ::Logging::Logger.new 'A'
|
463
|
+
assert_equal false, log.trace
|
464
|
+
|
465
|
+
log.trace = true
|
466
|
+
assert_equal true, log.trace
|
467
|
+
|
468
|
+
log.trace = false
|
469
|
+
assert_equal false, log.trace
|
470
|
+
|
471
|
+
log.trace = 'true'
|
472
|
+
assert_equal true, log.trace
|
473
|
+
|
474
|
+
log.trace = 'false'
|
475
|
+
assert_equal false, log.trace
|
476
|
+
|
477
|
+
log.trace = nil
|
478
|
+
assert_equal false, log.trace
|
479
|
+
|
480
|
+
assert_raise(ArgumentError) {log.trace = Object}
|
481
|
+
end
|
482
|
+
|
447
483
|
end # class TestLogger
|
448
484
|
|
449
485
|
class SioAppender < ::Logging::Appenders::IO
|
data/test/test_logging.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_logging.rb
|
1
|
+
# $Id: test_logging.rb 22 2007-01-29 16:20:54Z tim_pease $
|
2
2
|
|
3
3
|
require 'test/setup.rb'
|
4
4
|
|
@@ -13,6 +13,71 @@ module TestLogging
|
|
13
13
|
@lnames = ::Logging::LNAMES
|
14
14
|
end
|
15
15
|
|
16
|
+
def test_configure
|
17
|
+
assert_raise(ArgumentError) {::Logging.configure 'blah.txt'}
|
18
|
+
|
19
|
+
::Logging.configure 'examples/logging.yaml'
|
20
|
+
|
21
|
+
names = {
|
22
|
+
0 => 'DEB', 1 => 'INF', 2 => 'PRT',
|
23
|
+
3 => 'WRN', 4 => 'ERR', 5 => 'FAT'
|
24
|
+
}
|
25
|
+
assert_equal names, ::Logging::LNAMES
|
26
|
+
assert_equal :inspect, ::Logging::OBJ_FORMAT
|
27
|
+
assert_equal 3, ::Logging::Logger.root.level
|
28
|
+
|
29
|
+
# verify the appenders
|
30
|
+
h = ::Logging::Appender.instance_variable_get :@appenders
|
31
|
+
assert_equal ['logfile', 'stderr'], h.keys.sort
|
32
|
+
|
33
|
+
# start with the File appender
|
34
|
+
logfile = ::Logging::Appender['logfile']
|
35
|
+
assert_instance_of ::Logging::Appenders::File, logfile
|
36
|
+
assert_equal 0, logfile.level
|
37
|
+
assert_equal 'temp.log', logfile.instance_variable_get(:@fn)
|
38
|
+
|
39
|
+
layout = logfile.layout
|
40
|
+
assert_instance_of ::Logging::Layouts::Pattern, layout
|
41
|
+
assert_equal '[%d] %l %c : %m\\n', layout.pattern
|
42
|
+
assert_equal 'to_s', layout.date_method
|
43
|
+
assert_nil layout.date_pattern
|
44
|
+
|
45
|
+
# and now the Stderr appender
|
46
|
+
stderr = ::Logging::Appender['stderr']
|
47
|
+
assert_instance_of ::Logging::Appenders::Stderr, stderr
|
48
|
+
assert_equal 0, stderr.level
|
49
|
+
|
50
|
+
layout = stderr.layout
|
51
|
+
assert_instance_of ::Logging::Layouts::Basic, layout
|
52
|
+
|
53
|
+
# verify the loggers
|
54
|
+
h = ::Logging::Repository.instance.instance_variable_get :@h
|
55
|
+
assert_equal 3, h.length
|
56
|
+
|
57
|
+
# mylogger
|
58
|
+
mylogger = ::Logging::Logger['mylogger']
|
59
|
+
assert_equal 0, mylogger.level
|
60
|
+
assert_equal false, mylogger.additive
|
61
|
+
assert_equal false, mylogger.trace
|
62
|
+
|
63
|
+
appenders = mylogger.instance_variable_get :@appenders
|
64
|
+
assert_equal 2, appenders.length
|
65
|
+
assert_equal ['logfile', 'stderr'], appenders.map {|a| a.name}.sort
|
66
|
+
|
67
|
+
# yourlogger
|
68
|
+
yourlogger = ::Logging::Logger['yourlogger']
|
69
|
+
assert_equal 1, yourlogger.level
|
70
|
+
assert_equal true, yourlogger.additive
|
71
|
+
assert_equal false, yourlogger.trace
|
72
|
+
|
73
|
+
appenders = yourlogger.instance_variable_get :@appenders
|
74
|
+
assert_equal 2, appenders.length
|
75
|
+
assert_equal ['logfile', 'stderr'], appenders.map {|a| a.name}.sort
|
76
|
+
|
77
|
+
# cleanup
|
78
|
+
File.delete('temp.log') if File.exist?('temp.log')
|
79
|
+
end
|
80
|
+
|
16
81
|
def test_define_levels_default
|
17
82
|
empty = {}
|
18
83
|
assert_equal empty, @levels
|
@@ -91,7 +156,7 @@ module TestLogging
|
|
91
156
|
def test_format_as
|
92
157
|
assert_equal false, ::Logging.const_defined?('OBJ_FORMAT')
|
93
158
|
|
94
|
-
assert_raises(ArgumentError) {::Logging.format_as '
|
159
|
+
assert_raises(ArgumentError) {::Logging.format_as 'bob'}
|
95
160
|
assert_raises(ArgumentError) {::Logging.format_as String}
|
96
161
|
assert_raises(ArgumentError) {::Logging.format_as :what?}
|
97
162
|
|
@@ -113,6 +178,21 @@ module TestLogging
|
|
113
178
|
assert ::Logging.const_defined?('OBJ_FORMAT')
|
114
179
|
assert_equal :yaml, ::Logging::OBJ_FORMAT
|
115
180
|
remove_const[:OBJ_FORMAT]
|
181
|
+
|
182
|
+
::Logging.format_as 'string'
|
183
|
+
assert ::Logging.const_defined?('OBJ_FORMAT')
|
184
|
+
assert_equal :string, ::Logging::OBJ_FORMAT
|
185
|
+
remove_const[:OBJ_FORMAT]
|
186
|
+
|
187
|
+
::Logging.format_as 'inspect'
|
188
|
+
assert ::Logging.const_defined?('OBJ_FORMAT')
|
189
|
+
assert_equal :inspect, ::Logging::OBJ_FORMAT
|
190
|
+
remove_const[:OBJ_FORMAT]
|
191
|
+
|
192
|
+
::Logging.format_as 'yaml'
|
193
|
+
assert ::Logging.const_defined?('OBJ_FORMAT')
|
194
|
+
assert_equal :yaml, ::Logging::OBJ_FORMAT
|
195
|
+
remove_const[:OBJ_FORMAT]
|
116
196
|
end
|
117
197
|
|
118
198
|
end # class TestLogging
|