logging 0.5.3 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
|