TwP-logging 0.9.8 → 0.9.8.1
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +16 -1
- data/Rakefile +1 -1
- data/lib/logging/appender.rb +4 -56
- data/lib/logging/appenders/buffering.rb +2 -1
- data/lib/logging/appenders/console.rb +0 -2
- data/lib/logging/appenders/rolling_file.rb +0 -2
- data/lib/logging/appenders/string_io.rb +18 -19
- data/lib/logging/appenders/syslog.rb +0 -7
- data/lib/logging/appenders.rb +120 -0
- data/lib/logging/config/configurator.rb +1 -1
- data/lib/logging/config/yaml_configurator.rb +3 -7
- data/lib/logging/layout.rb +2 -4
- data/lib/logging/layouts/basic.rb +2 -4
- data/lib/logging/layouts/parseable.rb +211 -0
- data/lib/logging/layouts/pattern.rb +6 -8
- data/lib/logging/layouts.rb +47 -0
- data/lib/logging/log_event.rb +1 -1
- data/lib/logging/logger.rb +4 -4
- data/lib/logging.rb +51 -21
- data/lib/spec/logging_helper.rb +34 -0
- data/test/appenders/test_buffered_io.rb +26 -18
- data/test/appenders/test_console.rb +10 -10
- data/test/appenders/test_email.rb +18 -19
- data/test/appenders/test_file.rb +12 -12
- data/test/appenders/test_growl.rb +11 -12
- data/test/appenders/test_io.rb +14 -15
- data/test/appenders/test_rolling_file.rb +15 -24
- data/test/appenders/test_syslog.rb +10 -10
- data/test/layouts/test_basic.rb +4 -5
- data/test/layouts/test_json.rb +112 -0
- data/test/layouts/test_pattern.rb +9 -9
- data/test/layouts/test_yaml.rb +121 -0
- data/test/setup.rb +1 -1
- data/test/test_appender.rb +0 -14
- data/test/test_log_event.rb +1 -1
- data/test/test_logging.rb +3 -3
- metadata +10 -3
- data/logging.gemspec +0 -41
@@ -1,6 +1,5 @@
|
|
1
1
|
|
2
|
-
module Logging
|
3
|
-
module Layouts
|
2
|
+
module Logging::Layouts
|
4
3
|
|
5
4
|
# A flexible layout configurable with pattern string.
|
6
5
|
#
|
@@ -22,7 +21,7 @@ module Layouts
|
|
22
21
|
# Let the conversion pattern be "%-5l [%c]: %m\n" and assume that the
|
23
22
|
# logging environment was set to use a Pattern layout. Then the statements
|
24
23
|
#
|
25
|
-
# root = Logging
|
24
|
+
# root = Logging.logger[:root]
|
26
25
|
# root.debug("Message 1")
|
27
26
|
# root.warn("Message 2")
|
28
27
|
#
|
@@ -57,9 +56,9 @@ module Layouts
|
|
57
56
|
# [t] Used to output the object ID of the thread that generated the
|
58
57
|
# log event.
|
59
58
|
# [T] Used to output the name of the thread that generated the log event.
|
60
|
-
# Name can be specified using Thread.current[:name] notation. Output
|
61
|
-
# string if name not specified. This
|
62
|
-
# readable output for multithread application
|
59
|
+
# Name can be specified using Thread.current[:name] notation. Output
|
60
|
+
# empty string if name not specified. This option helps to create
|
61
|
+
# more human readable output for multithread application logs.
|
63
62
|
# [%] The sequence '%%' outputs a single percent sign.
|
64
63
|
#
|
65
64
|
# The directives F, L, and M will only work if the Logger generating the
|
@@ -290,7 +289,6 @@ module Layouts
|
|
290
289
|
# :startdoc:
|
291
290
|
|
292
291
|
end # class Pattern
|
293
|
-
end # module Layouts
|
294
|
-
end # module Logging
|
292
|
+
end # module Logging::Layouts
|
295
293
|
|
296
294
|
# EOF
|
@@ -0,0 +1,47 @@
|
|
1
|
+
|
2
|
+
module Logging
|
3
|
+
module Layouts
|
4
|
+
|
5
|
+
# Accessor / Factory for the Basic layout.
|
6
|
+
#
|
7
|
+
def basic( *args )
|
8
|
+
return ::Logging::Layouts::Basic if args.empty?
|
9
|
+
::Logging::Layouts::Basic.new(*args)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Accessor / Factory for the Pattern layout.
|
13
|
+
#
|
14
|
+
def pattern( *args )
|
15
|
+
return ::Logging::Layouts::Pattern if args.empty?
|
16
|
+
::Logging::Layouts::Pattern.new(*args)
|
17
|
+
end
|
18
|
+
|
19
|
+
# Accessor for the Parseable layout.
|
20
|
+
#
|
21
|
+
def parseable
|
22
|
+
::Logging::Layouts::Parseable
|
23
|
+
end
|
24
|
+
|
25
|
+
# Factory for the Parseable layout using JSON formatting.
|
26
|
+
#
|
27
|
+
def json( *args )
|
28
|
+
::Logging::Layouts::Parseable.json(*args)
|
29
|
+
end
|
30
|
+
|
31
|
+
# Factory for the Parseable layout using YAML formatting.
|
32
|
+
#
|
33
|
+
def yaml( *args )
|
34
|
+
::Logging::Layouts::Parseable.yaml(*args)
|
35
|
+
end
|
36
|
+
|
37
|
+
extend self
|
38
|
+
end # module Layouts
|
39
|
+
end # module Logging
|
40
|
+
|
41
|
+
|
42
|
+
%w[basic parseable pattern].
|
43
|
+
each do |fn|
|
44
|
+
require ::Logging.libpath('logging', 'layouts', fn)
|
45
|
+
end
|
46
|
+
|
47
|
+
# EOF
|
data/lib/logging/log_event.rb
CHANGED
data/lib/logging/logger.rb
CHANGED
@@ -12,8 +12,8 @@ module Logging
|
|
12
12
|
#
|
13
13
|
# Example:
|
14
14
|
#
|
15
|
-
# log = Logging
|
16
|
-
# log.add_appenders( Logging
|
15
|
+
# log = Logging.logger['my logger']
|
16
|
+
# log.add_appenders( Logging.appenders.stdout ) # append to STDOUT
|
17
17
|
# log.level = :info # log 'info' and above
|
18
18
|
#
|
19
19
|
# log.info 'starting foo operation'
|
@@ -312,8 +312,8 @@ module Logging
|
|
312
312
|
#
|
313
313
|
def add_appenders( *args )
|
314
314
|
args.flatten.each do |arg|
|
315
|
-
o = arg.kind_of?(::Logging::Appender) ? arg : ::Logging::
|
316
|
-
raise ArgumentError, "unknown appender
|
315
|
+
o = arg.kind_of?(::Logging::Appender) ? arg : ::Logging::Appenders[arg.to_s]
|
316
|
+
raise ArgumentError, "unknown appender #{arg.inspect}" if o.nil?
|
317
317
|
@appenders << o unless @appenders.include?(o)
|
318
318
|
end
|
319
319
|
self
|
data/lib/logging.rb
CHANGED
@@ -3,7 +3,24 @@
|
|
3
3
|
# Used to prevent the class/module from being loaded more than once
|
4
4
|
unless defined? Logging
|
5
5
|
|
6
|
+
require 'yaml'
|
7
|
+
require 'stringio'
|
6
8
|
require 'thread'
|
9
|
+
|
10
|
+
begin
|
11
|
+
require 'lockfile'
|
12
|
+
rescue LoadError
|
13
|
+
retry if require 'rubygems'
|
14
|
+
raise
|
15
|
+
end
|
16
|
+
|
17
|
+
begin
|
18
|
+
require 'syslog'
|
19
|
+
HAVE_SYSLOG = true
|
20
|
+
rescue LoadError
|
21
|
+
HAVE_SYSLOG = false
|
22
|
+
end
|
23
|
+
|
7
24
|
begin require 'fastthread'; rescue LoadError; end
|
8
25
|
|
9
26
|
# TODO: Windows Log Service appender
|
@@ -13,7 +30,7 @@ begin require 'fastthread'; rescue LoadError; end
|
|
13
30
|
module Logging
|
14
31
|
|
15
32
|
# :stopdoc:
|
16
|
-
VERSION = '0.9.8'
|
33
|
+
VERSION = '0.9.8.1'
|
17
34
|
LIBPATH = ::File.expand_path(::File.dirname(__FILE__)) + ::File::SEPARATOR
|
18
35
|
PATH = ::File.dirname(LIBPATH) + ::File::SEPARATOR
|
19
36
|
WIN32 = %r/djgpp|(cyg|ms|bcc)win|mingw/ =~ RUBY_PLATFORM
|
@@ -85,6 +102,8 @@ module Logging
|
|
85
102
|
# full description of the :pattern and :date_pattern formatting strings.
|
86
103
|
#
|
87
104
|
def logger( *args )
|
105
|
+
return ::Logging::Logger if args.empty?
|
106
|
+
|
88
107
|
opts = args.pop if args.last.instance_of?(Hash)
|
89
108
|
opts ||= Hash.new
|
90
109
|
|
@@ -141,6 +160,18 @@ module Logging
|
|
141
160
|
logger
|
142
161
|
end
|
143
162
|
|
163
|
+
# Access to the layouts.
|
164
|
+
#
|
165
|
+
def layouts
|
166
|
+
::Logging::Layouts
|
167
|
+
end
|
168
|
+
|
169
|
+
# Access to the appenders.
|
170
|
+
#
|
171
|
+
def appenders
|
172
|
+
::Logging::Appenders
|
173
|
+
end
|
174
|
+
|
144
175
|
# call-seq:
|
145
176
|
# Logging.init( levels )
|
146
177
|
#
|
@@ -182,8 +213,8 @@ module Logging
|
|
182
213
|
args = %w(debug info warn error fatal) if args.empty?
|
183
214
|
|
184
215
|
args.flatten!
|
185
|
-
levels =
|
186
|
-
names =
|
216
|
+
levels = LEVELS.clear
|
217
|
+
names = LNAMES.clear
|
187
218
|
|
188
219
|
id = 0
|
189
220
|
args.each do |lvl|
|
@@ -274,19 +305,6 @@ module Logging
|
|
274
305
|
args.empty? ? PATH : ::File.join(PATH, args.flatten)
|
275
306
|
end
|
276
307
|
|
277
|
-
# Utility method used to rquire all files ending in .rb that lie in the
|
278
|
-
# directory below this file that has the same name as the filename passed
|
279
|
-
# in. Optionally, a specific _directory_ name can be passed in such that
|
280
|
-
# the _filename_ does not have to be equivalent to the directory.
|
281
|
-
#
|
282
|
-
def require_all_libs_relative_to( fname, dir = nil )
|
283
|
-
dir ||= ::File.basename(fname, '.*')
|
284
|
-
search_me = ::File.expand_path(
|
285
|
-
::File.join(::File.dirname(fname), dir, '*.rb'))
|
286
|
-
|
287
|
-
Dir.glob(search_me).sort.each {|rb| require rb}
|
288
|
-
end
|
289
|
-
|
290
308
|
# call-seq:
|
291
309
|
# show_configuration( io = STDOUT, logger = 'root' )
|
292
310
|
#
|
@@ -386,17 +404,29 @@ module Logging
|
|
386
404
|
end
|
387
405
|
end # module Logging
|
388
406
|
|
389
|
-
|
390
|
-
Logging.
|
407
|
+
|
408
|
+
require Logging.libpath(%w[logging utils])
|
409
|
+
require Logging.libpath(%w[logging appender])
|
410
|
+
require Logging.libpath(%w[logging layout])
|
411
|
+
require Logging.libpath(%w[logging log_event])
|
412
|
+
require Logging.libpath(%w[logging logger])
|
413
|
+
require Logging.libpath(%w[logging repository])
|
414
|
+
require Logging.libpath(%w[logging root_logger])
|
415
|
+
require Logging.libpath(%w[logging stats])
|
416
|
+
require Logging.libpath(%w[logging appenders])
|
417
|
+
require Logging.libpath(%w[logging layouts])
|
418
|
+
|
419
|
+
require Logging.libpath(%w[logging config configurator])
|
420
|
+
require Logging.libpath(%w[logging config yaml_configurator])
|
421
|
+
|
391
422
|
|
392
423
|
# This exit handler will close all the appenders that exist in the system.
|
393
424
|
# This is needed for closing IO streams and connections to the syslog server
|
394
425
|
# or e-mail servers, etc.
|
395
426
|
#
|
396
427
|
at_exit {
|
397
|
-
Logging
|
398
|
-
|
399
|
-
end
|
428
|
+
Logging.log_internal {'at_exit hook called - closing all appenders'}
|
429
|
+
Logging::Appenders.each {|appender| appender.close}
|
400
430
|
}
|
401
431
|
|
402
432
|
end # unless defined?
|
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
module Spec
|
3
|
+
module LoggingHelper
|
4
|
+
|
5
|
+
# Capture log messages from the Logging framework and make them
|
6
|
+
# available via a @log_output instance variable. The @log_output
|
7
|
+
# supports a readline method to access the log messags.
|
8
|
+
#
|
9
|
+
def capture_log_messages( opts = {} )
|
10
|
+
from = opts.getopt(:from, 'root')
|
11
|
+
to = opts.getopt(:to, '__rspec__')
|
12
|
+
exclusive = opts.getopt(:exclusive, true)
|
13
|
+
|
14
|
+
appender = Logging::Appenders[to] || Logging::Appenders::StringIo.new(to)
|
15
|
+
logger = Logging::Logger[from]
|
16
|
+
if exclusive
|
17
|
+
logger.appenders = appender
|
18
|
+
else
|
19
|
+
logger.add_appenders(appender)
|
20
|
+
end
|
21
|
+
|
22
|
+
before(:all) do
|
23
|
+
@log_output = Logging::Appenders[to]
|
24
|
+
end
|
25
|
+
|
26
|
+
before(:each) do
|
27
|
+
@log_output.reset
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end # module LoggingHelper
|
32
|
+
end # module Spec
|
33
|
+
|
34
|
+
# EOF
|
@@ -9,20 +9,18 @@ module TestAppenders
|
|
9
9
|
|
10
10
|
def setup
|
11
11
|
super
|
12
|
-
|
13
|
-
@levels = ::Logging::LEVELS
|
14
|
-
|
15
|
-
@appender = ::Logging::Appenders::StringIo.new(
|
12
|
+
@appender = Logging.appenders.string_io(
|
16
13
|
'test_appender', :auto_flushing => 3, :immediate_at => :error
|
17
14
|
)
|
15
|
+
@appender.clear
|
18
16
|
@sio = @appender.sio
|
19
|
-
|
17
|
+
@levels = Logging::LEVELS
|
20
18
|
begin readline rescue EOFError end
|
21
19
|
end
|
22
20
|
|
23
21
|
def test_append
|
24
|
-
event =
|
25
|
-
|
22
|
+
event = Logging::LogEvent.new('TestLogger', @levels['warn'],
|
23
|
+
[1, 2, 3, 4], false)
|
26
24
|
@appender.append event
|
27
25
|
assert_nil(readline)
|
28
26
|
|
@@ -45,15 +43,15 @@ module TestAppenders
|
|
45
43
|
def test_append_error
|
46
44
|
# setup an internal logger to capture error messages from the IO
|
47
45
|
# appender
|
48
|
-
log = Logging
|
49
|
-
Logging
|
50
|
-
Logging
|
46
|
+
log = Logging.appenders.string_io('__internal_io')
|
47
|
+
Logging.logger[Logging].add_appenders(log)
|
48
|
+
Logging.logger[Logging].level = 'all'
|
51
49
|
|
52
50
|
|
53
51
|
# close the string IO object so we get an error
|
54
52
|
@sio.close
|
55
|
-
event =
|
56
|
-
|
53
|
+
event = Logging::LogEvent.new('TestLogger', @levels['warn'],
|
54
|
+
[1, 2, 3, 4], false)
|
57
55
|
@appender.append event
|
58
56
|
assert_nil(log.readline)
|
59
57
|
|
@@ -68,6 +66,16 @@ module TestAppenders
|
|
68
66
|
assert_equal 5, @appender.level
|
69
67
|
end
|
70
68
|
|
69
|
+
def test_auto_flushing
|
70
|
+
assert_raise(ArgumentError) {
|
71
|
+
@appender.auto_flushing = Object.new
|
72
|
+
}
|
73
|
+
|
74
|
+
assert_raise(ArgumentError) {
|
75
|
+
@appender.auto_flushing = -1
|
76
|
+
}
|
77
|
+
end
|
78
|
+
|
71
79
|
def test_close
|
72
80
|
assert_equal false, @sio.closed?
|
73
81
|
assert_equal false, @appender.closed?
|
@@ -77,7 +85,7 @@ module TestAppenders
|
|
77
85
|
assert_equal true, @appender.closed?
|
78
86
|
|
79
87
|
[STDIN, STDERR, STDOUT].each do |io|
|
80
|
-
@appender =
|
88
|
+
@appender = Logging.appenders.io('test', io)
|
81
89
|
@appender.close
|
82
90
|
assert_equal false, io.closed?
|
83
91
|
assert_equal true, @appender.closed?
|
@@ -105,9 +113,9 @@ module TestAppenders
|
|
105
113
|
def test_concat_error
|
106
114
|
# setup an internal logger to capture error messages from the IO
|
107
115
|
# appender
|
108
|
-
log = Logging
|
109
|
-
Logging
|
110
|
-
Logging
|
116
|
+
log = Logging.appenders.string_io('__internal_io')
|
117
|
+
Logging.logger[Logging].add_appenders(log)
|
118
|
+
Logging.logger[Logging].level = 'all'
|
111
119
|
|
112
120
|
# close the string IO object so we get an error
|
113
121
|
@sio.close
|
@@ -141,8 +149,8 @@ module TestAppenders
|
|
141
149
|
end
|
142
150
|
|
143
151
|
def test_immediate_at
|
144
|
-
event =
|
145
|
-
|
152
|
+
event = Logging::LogEvent.new('TestLogger', @levels['warn'],
|
153
|
+
[1, 2, 3, 4], false)
|
146
154
|
@appender.append event
|
147
155
|
assert_nil(readline)
|
148
156
|
|
@@ -8,9 +8,9 @@ module TestAppenders
|
|
8
8
|
include LoggingTestCase
|
9
9
|
|
10
10
|
def test_initialize
|
11
|
-
|
11
|
+
Logging::Repository.instance
|
12
12
|
|
13
|
-
appender =
|
13
|
+
appender = Logging.appenders.stdout
|
14
14
|
assert_equal 'stdout', appender.name
|
15
15
|
assert_same STDOUT, appender.instance_variable_get(:@io)
|
16
16
|
|
@@ -18,14 +18,14 @@ module TestAppenders
|
|
18
18
|
assert_equal true, appender.closed?
|
19
19
|
assert_equal false, STDOUT.closed?
|
20
20
|
|
21
|
-
appender =
|
21
|
+
appender = Logging.appenders.stdout('foo')
|
22
22
|
assert_equal 'foo', appender.name
|
23
23
|
|
24
|
-
appender =
|
24
|
+
appender = Logging.appenders.stdout(:level => :warn)
|
25
25
|
assert_equal 'stdout', appender.name
|
26
26
|
assert_equal 2, appender.level
|
27
27
|
|
28
|
-
appender =
|
28
|
+
appender = Logging.appenders.stdout('bar', :level => :error)
|
29
29
|
assert_equal 'bar', appender.name
|
30
30
|
assert_equal 3, appender.level
|
31
31
|
end
|
@@ -36,9 +36,9 @@ module TestAppenders
|
|
36
36
|
include LoggingTestCase
|
37
37
|
|
38
38
|
def test_initialize
|
39
|
-
|
39
|
+
Logging::Repository.instance
|
40
40
|
|
41
|
-
appender =
|
41
|
+
appender = Logging.appenders.stderr
|
42
42
|
assert_equal 'stderr', appender.name
|
43
43
|
assert_same STDERR, appender.instance_variable_get(:@io)
|
44
44
|
|
@@ -46,14 +46,14 @@ module TestAppenders
|
|
46
46
|
assert_equal true, appender.closed?
|
47
47
|
assert_equal false, STDERR.closed?
|
48
48
|
|
49
|
-
appender =
|
49
|
+
appender = Logging.appenders.stderr('foo')
|
50
50
|
assert_equal 'foo', appender.name
|
51
51
|
|
52
|
-
appender =
|
52
|
+
appender = Logging.appenders.stderr(:level => :warn)
|
53
53
|
assert_equal 'stderr', appender.name
|
54
54
|
assert_equal 2, appender.level
|
55
55
|
|
56
|
-
appender =
|
56
|
+
appender = Logging.appenders.stderr('bar', :level => :error)
|
57
57
|
assert_equal 'bar', appender.name
|
58
58
|
assert_equal 3, appender.level
|
59
59
|
end
|
@@ -11,8 +11,6 @@ module TestAppenders
|
|
11
11
|
|
12
12
|
def setup
|
13
13
|
super
|
14
|
-
::Logging.init
|
15
|
-
@levels = ::Logging::LEVELS
|
16
14
|
|
17
15
|
flexmock(Net::SMTP).new_instances do |m|
|
18
16
|
m.should_receive(:start).at_least.once.with(
|
@@ -20,25 +18,26 @@ module TestAppenders
|
|
20
18
|
m.should_receive(:sendmail).at_least.once.with(String, 'me', ['you'])
|
21
19
|
end
|
22
20
|
|
23
|
-
@appender =
|
21
|
+
@appender = Logging.appenders.email('email',
|
24
22
|
'from' => 'me', 'to' => 'you',
|
25
23
|
:buffer_size => '3', :immediate_at => 'error, fatal',
|
26
24
|
:domain => 'test.logging', :acct => 'test', :passwd => 'test'
|
27
25
|
)
|
26
|
+
@levels = Logging::LEVELS
|
28
27
|
end
|
29
28
|
|
30
29
|
def test_initialize
|
31
30
|
assert_raise(ArgumentError, 'Must specify from address') {
|
32
|
-
|
31
|
+
Logging.appenders.email('email')
|
33
32
|
}
|
34
33
|
assert_raise(ArgumentError, 'Must specify to address') {
|
35
|
-
|
34
|
+
Logging.appenders.email('email', :from => 'me')
|
36
35
|
}
|
37
36
|
assert_nothing_raised {
|
38
|
-
|
37
|
+
Logging.appenders.email('email', :from => 'me', :to => 'you')
|
39
38
|
}
|
40
39
|
|
41
|
-
appender =
|
40
|
+
appender = Logging.appenders.email('email',
|
42
41
|
'from' => 'me', 'to' => 'you'
|
43
42
|
)
|
44
43
|
|
@@ -53,7 +52,7 @@ module TestAppenders
|
|
53
52
|
assert_equal(:cram_md5, appender.authtype)
|
54
53
|
assert_equal("Message of #{$0}", appender.subject)
|
55
54
|
|
56
|
-
appender =
|
55
|
+
appender = Logging.appenders.email('email',
|
57
56
|
'from' => 'lbrinn@gmail.com', 'to' => 'everyone',
|
58
57
|
:buffsize => '1000', :immediate_at => 'error, fatal',
|
59
58
|
:server => 'smtp.google.com', :port => '443',
|
@@ -75,7 +74,7 @@ module TestAppenders
|
|
75
74
|
assert_equal(:tls, appender.authtype)
|
76
75
|
assert_equal("I'm rich and you're not", appender.subject)
|
77
76
|
|
78
|
-
appender =
|
77
|
+
appender = Logging.appenders.email('email',
|
79
78
|
'from' => 'me', 'to' => 'you', :auto_flushing => 42
|
80
79
|
)
|
81
80
|
assert_equal(42, appender.auto_flushing)
|
@@ -85,8 +84,8 @@ module TestAppenders
|
|
85
84
|
# with auto_flushing enabled, mail will be sent each time a log event
|
86
85
|
# occurs
|
87
86
|
@appender.auto_flushing = true
|
88
|
-
event =
|
89
|
-
|
87
|
+
event = Logging::LogEvent.new('TestLogger', @levels['warn'],
|
88
|
+
[1, 2, 3, 4], false)
|
90
89
|
@appender.append event
|
91
90
|
assert_not_equal(@levels.length, @appender.level)
|
92
91
|
assert_equal(0, @appender.buffer.length)
|
@@ -102,10 +101,10 @@ module TestAppenders
|
|
102
101
|
assert_equal(0, @appender.buffer.length)
|
103
102
|
|
104
103
|
# error and fatal messages should be send immediately (no buffering)
|
105
|
-
error =
|
106
|
-
|
107
|
-
fatal =
|
108
|
-
|
104
|
+
error = Logging::LogEvent.new('ErrLogger', @levels['error'],
|
105
|
+
'error message', false)
|
106
|
+
fatal = Logging::LogEvent.new('FatalLogger', @levels['fatal'],
|
107
|
+
'fatal message', false)
|
109
108
|
|
110
109
|
@appender.append event
|
111
110
|
@appender.append fatal
|
@@ -140,8 +139,8 @@ module TestAppenders
|
|
140
139
|
end
|
141
140
|
|
142
141
|
def test_flush
|
143
|
-
event =
|
144
|
-
|
142
|
+
event = Logging::LogEvent.new('TestLogger', @levels['info'],
|
143
|
+
[1, 2, 3, 4], false)
|
145
144
|
@appender.append event
|
146
145
|
@appender << 'test message'
|
147
146
|
assert_equal(2, @appender.buffer.length)
|
@@ -152,8 +151,8 @@ module TestAppenders
|
|
152
151
|
end
|
153
152
|
|
154
153
|
def test_close
|
155
|
-
event =
|
156
|
-
|
154
|
+
event = Logging::LogEvent.new('TestLogger', @levels['info'],
|
155
|
+
[1, 2, 3, 4], false)
|
157
156
|
@appender.append event
|
158
157
|
@appender << 'test message'
|
159
158
|
assert_equal(2, @appender.buffer.length)
|