logging 0.5.3 → 0.6.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/History.txt +7 -0
- data/Manifest.txt +12 -7
- data/Rakefile +4 -1
- data/data/logging.yaml +1 -1
- data/lib/logging.rb +4 -17
- data/lib/logging/appender.rb +23 -16
- data/lib/logging/appenders/console.rb +3 -5
- data/lib/logging/appenders/email.rb +127 -0
- data/lib/logging/appenders/file.rb +27 -15
- data/lib/logging/appenders/growl.rb +33 -56
- data/lib/logging/appenders/io.rb +16 -11
- data/lib/logging/appenders/rolling_file.rb +94 -31
- data/lib/logging/appenders/syslog.rb +32 -46
- data/lib/logging/layout.rb +5 -3
- data/lib/logging/layouts/pattern.rb +6 -6
- data/lib/logging/utils.rb +44 -0
- data/{tasks → rakelib}/doc.rake +2 -2
- data/{tasks → rakelib}/gem.rake +3 -3
- data/{tasks → rakelib}/manifest.rake +0 -0
- data/{tasks → rakelib}/rubyforge.rake +0 -0
- data/{tasks → rakelib}/setup.rb +1 -4
- data/{tasks → rakelib}/test.rake +0 -0
- data/{tasks → rakelib}/website.rake +0 -0
- data/test/appenders/test_email.rb +165 -0
- data/test/appenders/test_file.rb +13 -14
- data/test/appenders/test_growl.rb +115 -0
- data/test/appenders/test_io.rb +5 -3
- data/test/appenders/test_rolling_file.rb +3 -9
- data/test/appenders/test_syslog.rb +4 -8
- data/test/config/test_yaml_configurator.rb +1 -5
- data/test/setup.rb +14 -2
- data/test/test_appender.rb +14 -4
- data/test/test_logging.rb +2 -15
- data/test/test_utils.rb +49 -0
- metadata +86 -53
data/{tasks → rakelib}/doc.rake
RENAMED
data/{tasks → rakelib}/gem.rake
RENAMED
@@ -25,7 +25,7 @@ namespace :gem do
|
|
25
25
|
s.extensions = PROJ.files.grep %r/extconf\.rb$/
|
26
26
|
|
27
27
|
s.bindir = 'bin'
|
28
|
-
dirs = Dir['
|
28
|
+
dirs = Dir["{#{PROJ.libs.join(',')}}"]
|
29
29
|
s.require_paths = dirs unless dirs.empty?
|
30
30
|
|
31
31
|
incl = Regexp.new(PROJ.rdoc_include.join('|'))
|
@@ -33,8 +33,8 @@ namespace :gem do
|
|
33
33
|
excl = Regexp.new(excl.join('|'))
|
34
34
|
rdoc_files = PROJ.files.find_all do |fn|
|
35
35
|
case fn
|
36
|
-
when excl
|
37
|
-
when incl
|
36
|
+
when excl; false
|
37
|
+
when incl; true
|
38
38
|
else false end
|
39
39
|
end
|
40
40
|
s.rdoc_options = PROJ.rdoc_opts + ['--main', PROJ.rdoc_main]
|
File without changes
|
File without changes
|
data/{tasks → rakelib}/setup.rb
RENAMED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: setup.rb
|
1
|
+
# $Id: setup.rb 63 2007-12-22 20:47:54Z tim_pease $
|
2
2
|
|
3
3
|
require 'rubygems'
|
4
4
|
require 'rake'
|
@@ -56,9 +56,6 @@ PROJ.dependencies = []
|
|
56
56
|
PROJ.need_tar = true
|
57
57
|
PROJ.need_zip = false
|
58
58
|
|
59
|
-
# Import the rake tasks
|
60
|
-
FileList['tasks/*.rake'].each {|task| import task}
|
61
|
-
|
62
59
|
# Setup some constants
|
63
60
|
WIN32 = %r/win32/ =~ RUBY_PLATFORM unless defined? WIN32
|
64
61
|
|
data/{tasks → rakelib}/test.rake
RENAMED
File without changes
|
File without changes
|
@@ -0,0 +1,165 @@
|
|
1
|
+
# $Id: test_email.rb 69 2007-12-26 20:53:33Z tim_pease $
|
2
|
+
|
3
|
+
require 'test/setup.rb'
|
4
|
+
require 'flexmock'
|
5
|
+
|
6
|
+
module TestLogging
|
7
|
+
module TestAppenders
|
8
|
+
|
9
|
+
class TestEmail < Test::Unit::TestCase
|
10
|
+
include FlexMock::TestCase
|
11
|
+
include LoggingTestCase
|
12
|
+
|
13
|
+
def setup
|
14
|
+
super
|
15
|
+
::Logging.define_levels %w(debug info warn error fatal)
|
16
|
+
@levels = ::Logging::LEVELS
|
17
|
+
|
18
|
+
flexmock(Net::SMTP).new_instances do |m|
|
19
|
+
m.should_receive(:start).at_least.once.with(
|
20
|
+
'test.logging', 'test', 'test', :cram_md5, Proc).and_yield(m)
|
21
|
+
m.should_receive(:sendmail).at_least.once.with(String, 'me', ['you'])
|
22
|
+
end
|
23
|
+
|
24
|
+
@appender = ::Logging::Appenders::Email.new('email',
|
25
|
+
'from' => 'me', 'to' => 'you',
|
26
|
+
:buffsize => '3', :immediate_at => 'error, fatal',
|
27
|
+
:domain => 'test.logging', :acct => 'test', :passwd => 'test'
|
28
|
+
)
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_initialize
|
32
|
+
assert_raise(ArgumentError, 'Must specify from address') {
|
33
|
+
::Logging::Appenders::Email.new('email')
|
34
|
+
}
|
35
|
+
assert_raise(ArgumentError, 'Must specify to address') {
|
36
|
+
::Logging::Appenders::Email.new('email', :from => 'me')
|
37
|
+
}
|
38
|
+
assert_nothing_raised {
|
39
|
+
::Logging::Appenders::Email.new('email', :from => 'me', :to => 'you')
|
40
|
+
}
|
41
|
+
|
42
|
+
appender = ::Logging::Appenders::Email.new('email',
|
43
|
+
'from' => 'me', 'to' => 'you'
|
44
|
+
)
|
45
|
+
|
46
|
+
assert_equal(100, appender.instance_variable_get(:@buffsize))
|
47
|
+
assert_equal([], appender.instance_variable_get(:@immediate))
|
48
|
+
assert_equal('localhost', appender.server)
|
49
|
+
assert_equal(25, appender.port)
|
50
|
+
assert_equal(ENV['HOSTNAME'], appender.domain)
|
51
|
+
assert_equal(nil, appender.acct)
|
52
|
+
assert_equal(:cram_md5, appender.authtype)
|
53
|
+
assert_equal("Message of #{$0}", appender.subject)
|
54
|
+
|
55
|
+
appender = ::Logging::Appenders::Email.new('email',
|
56
|
+
'from' => 'lbrinn@gmail.com', 'to' => 'everyone',
|
57
|
+
:buffsize => '1000', :immediate_at => 'error, fatal',
|
58
|
+
:server => 'smtp.google.com', :port => '443',
|
59
|
+
:domain => 'google.com', :acct => 'lbrinn',
|
60
|
+
:passwd => '1234', :authtype => 'tls',
|
61
|
+
:subject => "I'm rich and you're not"
|
62
|
+
)
|
63
|
+
|
64
|
+
assert_equal('lbrinn@gmail.com', appender.instance_variable_get(:@from))
|
65
|
+
assert_equal(['everyone'], appender.instance_variable_get(:@to))
|
66
|
+
assert_equal(1000, appender.instance_variable_get(:@buffsize))
|
67
|
+
assert_equal('1234', appender.instance_variable_get(:@passwd))
|
68
|
+
assert_equal([nil, nil, nil, true, true],
|
69
|
+
appender.instance_variable_get(:@immediate))
|
70
|
+
assert_equal('smtp.google.com', appender.server)
|
71
|
+
assert_equal(443, appender.port)
|
72
|
+
assert_equal('google.com', appender.domain)
|
73
|
+
assert_equal('lbrinn', appender.acct)
|
74
|
+
assert_equal(:tls, appender.authtype)
|
75
|
+
assert_equal("I'm rich and you're not", appender.subject)
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_append
|
79
|
+
# with a buffer size of 0, mail will be sent each time a log event
|
80
|
+
# occurs
|
81
|
+
@appender.instance_variable_set(:@buffsize, 0)
|
82
|
+
event = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
|
83
|
+
[1, 2, 3, 4], false)
|
84
|
+
@appender.append event
|
85
|
+
assert_not_equal(@levels.length, @appender.level)
|
86
|
+
assert_equal(0, @appender.queued_messages)
|
87
|
+
|
88
|
+
# increase the buffer size and log a few events
|
89
|
+
@appender.instance_variable_set(:@buffsize, 3)
|
90
|
+
@appender.append event
|
91
|
+
@appender.append event
|
92
|
+
assert_equal(2, @appender.queued_messages)
|
93
|
+
|
94
|
+
@appender.append event
|
95
|
+
assert_not_equal(@levels.length, @appender.level)
|
96
|
+
assert_equal(0, @appender.queued_messages)
|
97
|
+
|
98
|
+
# error and fatal messages should be send immediately (no buffering)
|
99
|
+
error = ::Logging::LogEvent.new('ErrLogger', @levels['error'],
|
100
|
+
'error message', false)
|
101
|
+
fatal = ::Logging::LogEvent.new('FatalLogger', @levels['fatal'],
|
102
|
+
'fatal message', false)
|
103
|
+
|
104
|
+
@appender.append event
|
105
|
+
@appender.append fatal
|
106
|
+
assert_not_equal(@levels.length, @appender.level)
|
107
|
+
assert_equal(0, @appender.queued_messages)
|
108
|
+
|
109
|
+
@appender.append error
|
110
|
+
assert_not_equal(@levels.length, @appender.level)
|
111
|
+
assert_equal(0, @appender.queued_messages)
|
112
|
+
|
113
|
+
@appender.append event
|
114
|
+
assert_equal(1, @appender.queued_messages)
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_concat
|
118
|
+
# with a buffer size of 0, mail will be sent each time a log event
|
119
|
+
# occurs
|
120
|
+
@appender.instance_variable_set(:@buffsize, 0)
|
121
|
+
@appender << 'test message'
|
122
|
+
assert_not_equal(@levels.length, @appender.level)
|
123
|
+
assert_equal(0, @appender.queued_messages)
|
124
|
+
|
125
|
+
# increase the buffer size and log a few events
|
126
|
+
@appender.instance_variable_set(:@buffsize, 3)
|
127
|
+
@appender << 'another test message'
|
128
|
+
@appender << 'a second test message'
|
129
|
+
assert_equal(2, @appender.queued_messages)
|
130
|
+
|
131
|
+
@appender << 'a third test message'
|
132
|
+
assert_not_equal(@levels.length, @appender.level)
|
133
|
+
assert_equal(0, @appender.queued_messages)
|
134
|
+
end
|
135
|
+
|
136
|
+
def test_flush
|
137
|
+
event = ::Logging::LogEvent.new('TestLogger', @levels['info'],
|
138
|
+
[1, 2, 3, 4], false)
|
139
|
+
@appender.append event
|
140
|
+
@appender << 'test message'
|
141
|
+
assert_equal(2, @appender.queued_messages)
|
142
|
+
|
143
|
+
@appender.flush
|
144
|
+
assert_not_equal(@levels.length, @appender.level)
|
145
|
+
assert_equal(0, @appender.queued_messages)
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_close
|
149
|
+
event = ::Logging::LogEvent.new('TestLogger', @levels['info'],
|
150
|
+
[1, 2, 3, 4], false)
|
151
|
+
@appender.append event
|
152
|
+
@appender << 'test message'
|
153
|
+
assert_equal(2, @appender.queued_messages)
|
154
|
+
|
155
|
+
@appender.close
|
156
|
+
assert_not_equal(@levels.length, @appender.level)
|
157
|
+
assert_equal(0, @appender.queued_messages)
|
158
|
+
assert(@appender.closed?)
|
159
|
+
end
|
160
|
+
|
161
|
+
end # class TestEmail
|
162
|
+
end # module TestLogging
|
163
|
+
end # module TestAppenders
|
164
|
+
|
165
|
+
# EOF
|
data/test/appenders/test_file.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_file.rb
|
1
|
+
# $Id: test_file.rb 72 2007-12-26 21:59:58Z tim_pease $
|
2
2
|
|
3
3
|
require 'test/setup.rb'
|
4
4
|
require 'fileutils'
|
@@ -9,42 +9,41 @@ module TestAppenders
|
|
9
9
|
class TestFile < Test::Unit::TestCase
|
10
10
|
include LoggingTestCase
|
11
11
|
|
12
|
-
TMP = 'tmp'
|
13
12
|
NAME = 'logfile'
|
14
13
|
|
15
14
|
def setup
|
16
15
|
super
|
17
|
-
|
18
|
-
|
16
|
+
::Logging.define_levels %w(debug info warn error fatal)
|
17
|
+
|
19
18
|
FileUtils.mkdir [File.join(TMP, 'dir'), File.join(TMP, 'uw_dir')]
|
20
19
|
FileUtils.chmod 0555, File.join(TMP, 'uw_dir')
|
21
20
|
FileUtils.touch File.join(TMP, 'uw_file')
|
22
21
|
FileUtils.chmod 0444, File.join(TMP, 'uw_file')
|
23
22
|
end
|
24
23
|
|
25
|
-
def
|
26
|
-
cleanup
|
27
|
-
FileUtils.rm_rf TMP
|
28
|
-
end
|
29
|
-
|
30
|
-
def test_initialize
|
24
|
+
def test_class_assert_valid_logfile
|
31
25
|
log = File.join(TMP, 'uw_dir', 'file.log')
|
32
26
|
assert_raise(ArgumentError) do
|
33
|
-
::Logging::Appenders::File.
|
27
|
+
::Logging::Appenders::File.assert_valid_logfile(log)
|
34
28
|
end
|
35
29
|
|
36
30
|
log = File.join(TMP, 'dir')
|
37
31
|
assert_raise(ArgumentError) do
|
38
|
-
::Logging::Appenders::File.
|
32
|
+
::Logging::Appenders::File.assert_valid_logfile(log)
|
39
33
|
end
|
40
34
|
|
41
35
|
log = File.join(TMP, 'uw_file')
|
42
36
|
assert_raise(ArgumentError) do
|
43
|
-
::Logging::Appenders::File.
|
37
|
+
::Logging::Appenders::File.assert_valid_logfile(log)
|
44
38
|
end
|
45
39
|
|
46
40
|
log = File.join(TMP, 'file.log')
|
47
|
-
|
41
|
+
assert ::Logging::Appenders::File.assert_valid_logfile(log)
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_initialize
|
45
|
+
log = File.join(TMP, 'file.log')
|
46
|
+
appender = ::Logging::Appenders::File.new(NAME, 'filename' => log)
|
48
47
|
assert_equal 'logfile', appender.name
|
49
48
|
appender << "This will be the first line\n"
|
50
49
|
appender << "This will be the second line\n"
|
@@ -0,0 +1,115 @@
|
|
1
|
+
# $Id: test_growl.rb 69 2007-12-26 20:53:33Z tim_pease $
|
2
|
+
|
3
|
+
require 'test/setup.rb'
|
4
|
+
require 'flexmock'
|
5
|
+
|
6
|
+
module TestLogging
|
7
|
+
module TestAppenders
|
8
|
+
|
9
|
+
class TestGrowl < Test::Unit::TestCase
|
10
|
+
include FlexMock::TestCase
|
11
|
+
include LoggingTestCase
|
12
|
+
|
13
|
+
def setup
|
14
|
+
super
|
15
|
+
::Logging.define_levels %w(debug info warn error fatal)
|
16
|
+
@levels = ::Logging::LEVELS
|
17
|
+
|
18
|
+
@appender = ::Logging::Appenders::Growl.new('growl',
|
19
|
+
:coalesce => true, :separator => "\000",
|
20
|
+
:layout => Logging::Layouts::Pattern.new(:pattern => "%5l - Test\000%m")
|
21
|
+
)
|
22
|
+
@appender.level = :all
|
23
|
+
@growl = @appender.instance_variable_get(:@growl).dup
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_initialize
|
27
|
+
assert_equal('growlnotify -w -n "growl" -t "%s" -m "%s" -p %d &',
|
28
|
+
@appender.instance_variable_get(:@growl))
|
29
|
+
assert_equal(true, @appender.instance_variable_get(:@coalesce))
|
30
|
+
assert_equal("\000", @appender.instance_variable_get(:@title_sep))
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_append
|
34
|
+
info = ::Logging::LogEvent.new('TestLogger', @levels['info'],
|
35
|
+
'info message', false)
|
36
|
+
warn = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
|
37
|
+
'warning message', false)
|
38
|
+
|
39
|
+
flexmock(@appender).should_receive(:system).once.with(
|
40
|
+
@growl % ['WARN - Test', "warning message\nwarning message\nwarning message", 0])
|
41
|
+
|
42
|
+
flexmock(@appender).should_receive(:system).once.with(
|
43
|
+
@growl % ['INFO - Test', "info message\ninfo message", -1])
|
44
|
+
|
45
|
+
flexmock(@appender).should_receive(:system).once.with(
|
46
|
+
@growl % ['WARN - Test', "warning message", 0])
|
47
|
+
|
48
|
+
@appender.append warn
|
49
|
+
@appender.append warn
|
50
|
+
@appender.append warn
|
51
|
+
@appender.append info
|
52
|
+
@appender.append info
|
53
|
+
@appender.append warn
|
54
|
+
sleep 0.7 # give the coalescing thread time to run
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_append_without_coalescing
|
58
|
+
@appender.instance_variable_set(:@coalesce, false)
|
59
|
+
event = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
|
60
|
+
'warning message', false)
|
61
|
+
|
62
|
+
flexmock(@appender).should_receive(:system).twice.with(
|
63
|
+
@growl % ['WARN - Test', 'warning message', 0])
|
64
|
+
|
65
|
+
@appender.append event
|
66
|
+
@appender.append event
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_concat
|
70
|
+
flexmock(@appender).should_receive(:system).once.with(
|
71
|
+
@growl % ['', "first message\nsecond message\nthird message", 0])
|
72
|
+
|
73
|
+
@appender << 'first message'
|
74
|
+
@appender << 'second message'
|
75
|
+
@appender << 'third message'
|
76
|
+
sleep 0.7 # give the coalescing thread time to run
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_concat_without_coalescing
|
80
|
+
@appender.instance_variable_set(:@coalesce, false)
|
81
|
+
|
82
|
+
flexmock(@appender).should_receive(:system).twice.with(
|
83
|
+
@growl % ['', 'concat message', 0])
|
84
|
+
|
85
|
+
@appender << 'concat message'
|
86
|
+
@appender << 'concat message'
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_map_eq
|
90
|
+
get_map = lambda {@appender.instance_variable_get(:@map)}
|
91
|
+
assert_equal([-2,-1,0,1,2], get_map.call)
|
92
|
+
|
93
|
+
@appender.map = {
|
94
|
+
'fatal' => '0',
|
95
|
+
:error => -2,
|
96
|
+
:warn => '2',
|
97
|
+
'INFO' => 1,
|
98
|
+
'Debug' => -1
|
99
|
+
}
|
100
|
+
assert_equal([-1,1,2,-2,0], get_map.call)
|
101
|
+
|
102
|
+
assert_raise(ArgumentError) do
|
103
|
+
@appender.map = {:fatal => 'not a number', :error => 2}
|
104
|
+
end
|
105
|
+
|
106
|
+
assert_raise(ArgumentError) do
|
107
|
+
@appender.map = {:fatal => -3, :error => 3}
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
end # class TestGrowl
|
112
|
+
end # module TestLogging
|
113
|
+
end # module TestAppenders
|
114
|
+
|
115
|
+
# EOF
|
data/test/appenders/test_io.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_io.rb
|
1
|
+
# $Id: test_io.rb 67 2007-12-26 16:27:06Z tim_pease $
|
2
2
|
|
3
3
|
require 'test/setup.rb'
|
4
4
|
require 'stringio'
|
@@ -41,7 +41,8 @@ module TestAppenders
|
|
41
41
|
event = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
|
42
42
|
[1, 2, 3, 4], false)
|
43
43
|
assert_raise(IOError) {@appender.append event}
|
44
|
-
assert_equal
|
44
|
+
assert_equal false, @appender.closed?
|
45
|
+
assert_equal 5, @appender.level
|
45
46
|
end
|
46
47
|
|
47
48
|
def test_close
|
@@ -78,7 +79,8 @@ module TestAppenders
|
|
78
79
|
def test_concat_error
|
79
80
|
@sio.close
|
80
81
|
assert_raise(IOError) {@appender << 'oopsy'}
|
81
|
-
assert_equal
|
82
|
+
assert_equal false, @appender.closed?
|
83
|
+
assert_equal 5, @appender.level
|
82
84
|
end
|
83
85
|
|
84
86
|
def test_flush
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# $Id: test_rolling_file.rb
|
1
|
+
# $Id: test_rolling_file.rb 72 2007-12-26 21:59:58Z tim_pease $
|
2
2
|
|
3
3
|
require 'test/setup.rb'
|
4
4
|
require 'fileutils'
|
@@ -9,23 +9,17 @@ module TestAppenders
|
|
9
9
|
class TestRollingFile < Test::Unit::TestCase
|
10
10
|
include LoggingTestCase
|
11
11
|
|
12
|
-
TMP = 'tmp'
|
13
12
|
NAME = 'roller'
|
14
13
|
|
15
14
|
def setup
|
16
15
|
super
|
17
|
-
|
18
|
-
|
16
|
+
::Logging.define_levels %w(debug info warn error fatal)
|
17
|
+
|
19
18
|
@fn = File.join(TMP, 'test.log')
|
20
19
|
@fn_fmt = File.join(TMP, 'test.%d.log')
|
21
20
|
@glob = File.join(TMP, '*.log')
|
22
21
|
end
|
23
22
|
|
24
|
-
def teardown
|
25
|
-
cleanup
|
26
|
-
FileUtils.rm_rf TMP
|
27
|
-
end
|
28
|
-
|
29
23
|
def test_initialize
|
30
24
|
assert_equal [], Dir.glob(@glob)
|
31
25
|
|