logging 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +9 -0
- data/Manifest.txt +6 -0
- data/Rakefile +1 -0
- data/data/bad_logging_1.rb +13 -0
- data/data/bad_logging_2.rb +21 -0
- data/data/logging.rb +42 -0
- data/data/simple_logging.rb +13 -0
- data/lib/logging.rb +14 -8
- data/lib/logging/appender.rb +36 -6
- data/lib/logging/appenders/console.rb +0 -1
- data/lib/logging/appenders/email.rb +3 -4
- data/lib/logging/appenders/file.rb +0 -1
- data/lib/logging/appenders/growl.rb +16 -5
- data/lib/logging/appenders/io.rb +0 -1
- data/lib/logging/appenders/rolling_file.rb +1 -2
- data/lib/logging/appenders/syslog.rb +0 -1
- data/lib/logging/config/configurator.rb +182 -0
- data/lib/logging/config/yaml_configurator.rb +0 -1
- data/lib/logging/layout.rb +0 -1
- data/lib/logging/layouts/basic.rb +0 -1
- data/lib/logging/layouts/pattern.rb +5 -6
- data/lib/logging/log_event.rb +0 -1
- data/lib/logging/logger.rb +24 -14
- data/lib/logging/repository.rb +13 -3
- data/lib/logging/root_logger.rb +0 -1
- data/lib/logging/utils.rb +0 -1
- data/tasks/ann.rake +0 -1
- data/tasks/bones.rake +0 -1
- data/tasks/gem.rake +0 -1
- data/tasks/git.rake +1 -2
- data/tasks/manifest.rake +0 -1
- data/tasks/notes.rake +0 -1
- data/tasks/post_load.rake +0 -1
- data/tasks/rdoc.rake +0 -1
- data/tasks/rubyforge.rake +1 -2
- data/tasks/setup.rb +0 -1
- data/tasks/test.rake +0 -1
- data/test/appenders/test_console.rb +0 -1
- data/test/appenders/test_email.rb +0 -1
- data/test/appenders/test_file.rb +0 -1
- data/test/appenders/test_growl.rb +22 -9
- data/test/appenders/test_io.rb +30 -3
- data/test/appenders/test_rolling_file.rb +0 -1
- data/test/appenders/test_syslog.rb +0 -1
- data/test/benchmark.rb +0 -1
- data/test/config/test_configurator.rb +70 -0
- data/test/config/test_yaml_configurator.rb +0 -1
- data/test/layouts/test_basic.rb +0 -1
- data/test/layouts/test_pattern.rb +0 -1
- data/test/setup.rb +0 -1
- data/test/test_appender.rb +0 -1
- data/test/test_layout.rb +0 -1
- data/test/test_log_event.rb +0 -1
- data/test/test_logger.rb +2 -2
- data/test/test_logging.rb +1 -2
- data/test/test_repository.rb +2 -3
- data/test/test_root_logger.rb +0 -1
- data/test/test_utils.rb +0 -1
- metadata +9 -2
data/lib/logging/layout.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# $Id$
|
2
1
|
|
3
2
|
module Logging
|
4
3
|
module Layouts
|
@@ -165,7 +164,7 @@ module Layouts
|
|
165
164
|
end
|
166
165
|
code << "end\n"
|
167
166
|
|
168
|
-
pf.
|
167
|
+
pf._meta_eval(code, __FILE__, __LINE__)
|
169
168
|
end
|
170
169
|
|
171
170
|
# call-seq:
|
@@ -205,7 +204,7 @@ module Layouts
|
|
205
204
|
code << ")\n"
|
206
205
|
code << "end\n"
|
207
206
|
|
208
|
-
pf.
|
207
|
+
pf._meta_eval(code, __FILE__, __LINE__)
|
209
208
|
end
|
210
209
|
# :startdoc:
|
211
210
|
|
@@ -274,14 +273,14 @@ module Layouts
|
|
274
273
|
# :stopdoc:
|
275
274
|
|
276
275
|
# call-seq:
|
277
|
-
#
|
276
|
+
# _meta_eval( code )
|
278
277
|
#
|
279
278
|
# Evaluates the given string of _code_ if the singleton class of this
|
280
279
|
# Pattern Layout object.
|
281
280
|
#
|
282
|
-
def
|
281
|
+
def _meta_eval( code, file = nil, line = nil )
|
283
282
|
meta = class << self; self end
|
284
|
-
meta.class_eval code
|
283
|
+
meta.class_eval code, file, line
|
285
284
|
end
|
286
285
|
# :startdoc:
|
287
286
|
|
data/lib/logging/log_event.rb
CHANGED
data/lib/logging/logger.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# $Id$
|
2
1
|
|
3
2
|
require 'thread'
|
4
3
|
|
@@ -105,8 +104,9 @@ module Logging
|
|
105
104
|
CODE
|
106
105
|
end
|
107
106
|
|
108
|
-
logger.
|
107
|
+
logger._meta_eval(code, __FILE__, __LINE__)
|
109
108
|
end
|
109
|
+
logger
|
110
110
|
end
|
111
111
|
# :startdoc:
|
112
112
|
|
@@ -143,14 +143,7 @@ module Logging
|
|
143
143
|
else raise(ArgumentError, "logger name must be a String") end
|
144
144
|
|
145
145
|
repo = ::Logging::Repository.instance
|
146
|
-
|
147
|
-
@parent = repo.parent(name)
|
148
|
-
@appenders = []
|
149
|
-
@additive = true
|
150
|
-
@trace = false
|
151
|
-
@level = nil
|
152
|
-
::Logging::Logger.define_log_methods(self)
|
153
|
-
|
146
|
+
_setup(name, :parent => repo.parent(name))
|
154
147
|
repo.children(name).each {|c| c.parent = self}
|
155
148
|
end
|
156
149
|
|
@@ -407,21 +400,38 @@ module Logging
|
|
407
400
|
::Logging::Repository.instance.children(name).each do |c|
|
408
401
|
c.define_log_methods
|
409
402
|
end
|
403
|
+
self
|
410
404
|
end
|
411
405
|
|
412
406
|
# :stopdoc:
|
407
|
+
public
|
413
408
|
|
414
409
|
# call-seq:
|
415
|
-
#
|
410
|
+
# _meta_eval( code )
|
416
411
|
#
|
417
412
|
# Evaluates the given string of _code_ if the singleton class of this
|
418
413
|
# Logger object.
|
419
414
|
#
|
420
|
-
def
|
415
|
+
def _meta_eval( code, file = nil, line = nil )
|
421
416
|
meta = class << self; self end
|
422
|
-
meta.class_eval code
|
417
|
+
meta.class_eval code, file, line
|
418
|
+
end
|
419
|
+
|
420
|
+
# call-seq:
|
421
|
+
# _setup( name, opts = {} )
|
422
|
+
#
|
423
|
+
# Configures internal variables for the logger. This method can be used
|
424
|
+
# to avoid storing the logger in the repository.
|
425
|
+
#
|
426
|
+
def _setup( name, opts = {} )
|
427
|
+
@name = name
|
428
|
+
@parent = opts.getopt(:parent)
|
429
|
+
@appenders = opts.getopt(:appenders, [])
|
430
|
+
@additive = opts.getopt(:additive, true)
|
431
|
+
@trace = opts.getopt(:trace, false)
|
432
|
+
@level = opts.getopt(:level)
|
433
|
+
::Logging::Logger.define_log_methods(self)
|
423
434
|
end
|
424
|
-
public :meta_eval
|
425
435
|
# :startdoc:
|
426
436
|
|
427
437
|
end # class Logger
|
data/lib/logging/repository.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# $Id$
|
2
1
|
|
3
2
|
require 'singleton'
|
4
3
|
|
@@ -20,6 +19,15 @@ module Logging
|
|
20
19
|
#
|
21
20
|
def initialize
|
22
21
|
@h = {:root => ::Logging::RootLogger.new}
|
22
|
+
|
23
|
+
logger = ::Logging::Logger.allocate
|
24
|
+
logger._setup(
|
25
|
+
to_key(::Logging),
|
26
|
+
:parent => @h[:root],
|
27
|
+
:additive => false,
|
28
|
+
:level => ::Logging::LEVELS.length # turns this logger off
|
29
|
+
)
|
30
|
+
@h[logger.name] = logger
|
23
31
|
end
|
24
32
|
|
25
33
|
# call-seq:
|
@@ -153,8 +161,10 @@ module Logging
|
|
153
161
|
#
|
154
162
|
def to_key( key )
|
155
163
|
case key
|
156
|
-
when
|
157
|
-
when
|
164
|
+
when :root, 'root'; :root
|
165
|
+
when String; key
|
166
|
+
when Symbol; key.to_s
|
167
|
+
when Module; key.name
|
158
168
|
when Object; key.class.name
|
159
169
|
end
|
160
170
|
end
|
data/lib/logging/root_logger.rb
CHANGED
data/lib/logging/utils.rb
CHANGED
data/tasks/ann.rake
CHANGED
data/tasks/bones.rake
CHANGED
data/tasks/gem.rake
CHANGED
data/tasks/git.rake
CHANGED
data/tasks/manifest.rake
CHANGED
data/tasks/notes.rake
CHANGED
data/tasks/post_load.rake
CHANGED
data/tasks/rdoc.rake
CHANGED
data/tasks/rubyforge.rake
CHANGED
data/tasks/setup.rb
CHANGED
data/tasks/test.rake
CHANGED
data/test/appenders/test_file.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# $Id$
|
2
1
|
|
3
2
|
require File.join(File.dirname(__FILE__), %w[.. setup])
|
4
3
|
require 'flexmock'
|
@@ -24,8 +23,7 @@ module TestAppenders
|
|
24
23
|
end
|
25
24
|
|
26
25
|
def test_initialize
|
27
|
-
assert_equal('growlnotify -w -n "growl" -t "%s" -m "%s" -p %d &',
|
28
|
-
@appender.instance_variable_get(:@growl))
|
26
|
+
assert_equal('growlnotify -w -n "growl" -t "%s" -m "%s" -p %d &', @growl)
|
29
27
|
assert_equal(true, @appender.instance_variable_get(:@coalesce))
|
30
28
|
assert_equal("\000", @appender.instance_variable_get(:@title_sep))
|
31
29
|
end
|
@@ -36,13 +34,13 @@ module TestAppenders
|
|
36
34
|
warn = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
|
37
35
|
'warning message', false)
|
38
36
|
|
39
|
-
flexmock(@appender).should_receive(:system).once.with(
|
37
|
+
flexmock(@appender).should_receive(:system => true).once.with(
|
40
38
|
@growl % ['WARN - Test', "warning message\nwarning message\nwarning message", 0])
|
41
39
|
|
42
|
-
flexmock(@appender).should_receive(:system).once.with(
|
40
|
+
flexmock(@appender).should_receive(:system => true).once.with(
|
43
41
|
@growl % ['INFO - Test', "info message\ninfo message", -1])
|
44
42
|
|
45
|
-
flexmock(@appender).should_receive(:system).once.with(
|
43
|
+
flexmock(@appender).should_receive(:system => true).once.with(
|
46
44
|
@growl % ['WARN - Test', "warning message", 0])
|
47
45
|
|
48
46
|
@appender.append warn
|
@@ -59,7 +57,7 @@ module TestAppenders
|
|
59
57
|
event = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
|
60
58
|
'warning message', false)
|
61
59
|
|
62
|
-
flexmock(@appender).should_receive(:system).twice.with(
|
60
|
+
flexmock(@appender).should_receive(:system => true).twice.with(
|
63
61
|
@growl % ['WARN - Test', 'warning message', 0])
|
64
62
|
|
65
63
|
@appender.append event
|
@@ -67,7 +65,7 @@ module TestAppenders
|
|
67
65
|
end
|
68
66
|
|
69
67
|
def test_concat
|
70
|
-
flexmock(@appender).should_receive(:system).once.with(
|
68
|
+
flexmock(@appender).should_receive(:system => true).once.with(
|
71
69
|
@growl % ['', "first message\nsecond message\nthird message", 0])
|
72
70
|
|
73
71
|
@appender << 'first message'
|
@@ -79,7 +77,7 @@ module TestAppenders
|
|
79
77
|
def test_concat_without_coalescing
|
80
78
|
@appender.instance_variable_set(:@coalesce, false)
|
81
79
|
|
82
|
-
flexmock(@appender).should_receive(:system).twice.with(
|
80
|
+
flexmock(@appender).should_receive(:system => true).twice.with(
|
83
81
|
@growl % ['', 'concat message', 0])
|
84
82
|
|
85
83
|
@appender << 'concat message'
|
@@ -108,6 +106,21 @@ module TestAppenders
|
|
108
106
|
end
|
109
107
|
end
|
110
108
|
|
109
|
+
def test_disabling
|
110
|
+
@appender.instance_variable_set(:@coalesce, false)
|
111
|
+
event = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
|
112
|
+
'warning message', false)
|
113
|
+
|
114
|
+
flexmock(@appender).should_receive(:system => false).once.with(
|
115
|
+
@growl % ['WARN - Test', 'warning message', 0])
|
116
|
+
|
117
|
+
assert_equal 0, @appender.level
|
118
|
+
@appender.append event
|
119
|
+
assert_equal 5, @appender.level
|
120
|
+
@appender.append event
|
121
|
+
@appender.append event
|
122
|
+
end
|
123
|
+
|
111
124
|
end # class TestGrowl
|
112
125
|
end # module TestLogging
|
113
126
|
end # module TestAppenders
|
data/test/appenders/test_io.rb
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
# $Id$
|
2
1
|
|
3
2
|
require File.join(File.dirname(__FILE__), %w[.. setup])
|
4
3
|
|
@@ -36,10 +35,24 @@ module TestAppenders
|
|
36
35
|
end
|
37
36
|
|
38
37
|
def test_append_error
|
38
|
+
# setup an internal logger to capture error messages from the IO
|
39
|
+
# appender
|
40
|
+
log = StringIO.new
|
41
|
+
Logging::Logger[Logging::Appenders::IO].add_appenders(
|
42
|
+
Logging::Appenders::IO.new('__internal_io', log)
|
43
|
+
)
|
44
|
+
Logging::Logger[Logging::Appenders::IO].level = 'all'
|
45
|
+
|
46
|
+
|
47
|
+
# close the string IO object so we get an error
|
39
48
|
@sio.close
|
40
49
|
event = ::Logging::LogEvent.new('TestLogger', @levels['warn'],
|
41
50
|
[1, 2, 3, 4], false)
|
42
|
-
|
51
|
+
@appender.append event
|
52
|
+
|
53
|
+
log.seek 0
|
54
|
+
assert_equal "ERROR Logging::Appenders::IO : <IOError> not opened for writing", log.readline.strip
|
55
|
+
|
43
56
|
assert_equal false, @appender.closed?
|
44
57
|
assert_equal 5, @appender.level
|
45
58
|
end
|
@@ -76,8 +89,22 @@ module TestAppenders
|
|
76
89
|
end
|
77
90
|
|
78
91
|
def test_concat_error
|
92
|
+
# setup an internal logger to capture error messages from the IO
|
93
|
+
# appender
|
94
|
+
log = StringIO.new
|
95
|
+
Logging::Logger[Logging::Appenders::IO].add_appenders(
|
96
|
+
Logging::Appenders::IO.new('__internal_io', log)
|
97
|
+
)
|
98
|
+
Logging::Logger[Logging::Appenders::IO].level = 'all'
|
99
|
+
|
100
|
+
# close the string IO object so we get an error
|
79
101
|
@sio.close
|
80
|
-
|
102
|
+
@appender << 'oopsy'
|
103
|
+
|
104
|
+
log.seek 0
|
105
|
+
assert_equal "ERROR Logging::Appenders::IO : <IOError> not opened for writing", log.readline.strip
|
106
|
+
|
107
|
+
# and the appender does not close itself
|
81
108
|
assert_equal false, @appender.closed?
|
82
109
|
assert_equal 5, @appender.level
|
83
110
|
end
|
data/test/benchmark.rb
CHANGED
@@ -0,0 +1,70 @@
|
|
1
|
+
|
2
|
+
require File.join(File.dirname(__FILE__), %w[.. setup])
|
3
|
+
|
4
|
+
module TestLogging
|
5
|
+
module TestConfig
|
6
|
+
|
7
|
+
class TestConfigurator < Test::Unit::TestCase
|
8
|
+
include LoggingTestCase
|
9
|
+
|
10
|
+
def test_configuration
|
11
|
+
begin
|
12
|
+
load Logging.path(%w[data logging.rb])
|
13
|
+
rescue Exception => err
|
14
|
+
flunk err.inspect
|
15
|
+
end
|
16
|
+
|
17
|
+
levels = {
|
18
|
+
'deb' => 0,
|
19
|
+
'inf' => 1,
|
20
|
+
'prt' => 2,
|
21
|
+
'wrn' => 3,
|
22
|
+
'err' => 4,
|
23
|
+
'fat' => 5
|
24
|
+
}
|
25
|
+
assert_equal levels, Logging::LEVELS
|
26
|
+
assert_equal :inspect, Logging::OBJ_FORMAT
|
27
|
+
|
28
|
+
hash = Logging::Repository.instance.instance_variable_get(:@h)
|
29
|
+
assert hash.has_key?('A::B::C')
|
30
|
+
assert hash.has_key?('yourlogger')
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_simple_configuration
|
34
|
+
begin
|
35
|
+
load Logging.path(%w[data simple_logging.rb])
|
36
|
+
rescue Exception => err
|
37
|
+
flunk err.inspect
|
38
|
+
end
|
39
|
+
|
40
|
+
levels = {
|
41
|
+
'debug' => 0,
|
42
|
+
'info' => 1,
|
43
|
+
'warn' => 2,
|
44
|
+
'error' => 3,
|
45
|
+
'fatal' => 4
|
46
|
+
}
|
47
|
+
assert_equal levels, Logging::LEVELS
|
48
|
+
assert_equal false, Logging.const_defined?('OBJ_FORMAT')
|
49
|
+
|
50
|
+
root = Logging::Logger.root
|
51
|
+
assert_equal 1, root.level
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_bad_appender_configuration
|
55
|
+
assert_raise(Logging::Config::Configurator::Error) {
|
56
|
+
load Logging.path(%w[data bad_logging_1.rb])
|
57
|
+
}
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_bad_layout_configuration
|
61
|
+
assert_raise(Logging::Config::Configurator::Error) {
|
62
|
+
load Logging.path(%w[data bad_logging_2.rb])
|
63
|
+
}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
end # module TestConfig
|
68
|
+
end # module TestLogging
|
69
|
+
|
70
|
+
# EOF
|