logging 0.8.0 → 0.9.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 +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
|