logging 1.8.2 → 2.0.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.
- checksums.yaml +4 -4
- data/.travis.yml +3 -3
- data/History.txt +20 -0
- data/README.md +159 -0
- data/Rakefile +9 -5
- data/examples/appenders.rb +0 -4
- data/examples/layouts.rb +1 -8
- data/examples/names.rb +4 -4
- data/lib/logging.rb +24 -76
- data/lib/logging/appender.rb +71 -16
- data/lib/logging/appenders.rb +0 -2
- data/lib/logging/appenders/buffering.rb +32 -16
- data/lib/logging/appenders/file.rb +2 -2
- data/lib/logging/appenders/io.rb +1 -1
- data/lib/logging/appenders/rolling_file.rb +228 -165
- data/lib/logging/appenders/string_io.rb +1 -1
- data/lib/logging/appenders/syslog.rb +4 -4
- data/lib/logging/color_scheme.rb +20 -3
- data/lib/logging/diagnostic_context.rb +142 -17
- data/lib/logging/filter.rb +18 -0
- data/lib/logging/filters.rb +4 -0
- data/lib/logging/filters/level.rb +29 -0
- data/lib/logging/layout.rb +2 -2
- data/lib/logging/layouts/parseable.rb +5 -2
- data/lib/logging/layouts/pattern.rb +309 -168
- data/lib/logging/log_event.rb +5 -5
- data/lib/logging/logger.rb +55 -68
- data/lib/logging/repository.rb +24 -39
- data/lib/logging/root_logger.rb +1 -1
- data/lib/logging/utils.rb +4 -65
- data/lib/logging/version.rb +8 -0
- data/lib/rspec/logging_helper.rb +3 -3
- data/logging.gemspec +46 -0
- data/test/appenders/test_buffered_io.rb +29 -0
- data/test/appenders/test_file.rb +2 -2
- data/test/appenders/test_rolling_file.rb +62 -1
- data/test/layouts/test_color_pattern.rb +1 -1
- data/test/layouts/test_json.rb +3 -0
- data/test/layouts/test_pattern.rb +6 -2
- data/test/layouts/test_yaml.rb +4 -1
- data/test/test_appender.rb +56 -0
- data/test/test_filter.rb +33 -0
- data/test/test_layout.rb +4 -8
- data/test/test_log_event.rb +3 -3
- data/test/test_logger.rb +81 -57
- data/test/test_logging.rb +0 -59
- data/test/test_mapped_diagnostic_context.rb +49 -1
- data/test/test_nested_diagnostic_context.rb +16 -1
- data/test/test_repository.rb +24 -32
- data/test/test_utils.rb +14 -50
- metadata +35 -53
- data/README.rdoc +0 -143
- data/data/bad_logging_1.rb +0 -13
- data/data/bad_logging_2.rb +0 -21
- data/data/logging.rb +0 -42
- data/data/logging.yaml +0 -63
- data/data/simple_logging.rb +0 -13
- data/examples/consolidation.rb +0 -83
- data/lib/logging/appenders/email.rb +0 -178
- data/lib/logging/appenders/growl.rb +0 -200
- data/lib/logging/config/configurator.rb +0 -187
- data/lib/logging/config/yaml_configurator.rb +0 -190
- data/lib/logging/stats.rb +0 -277
- data/test/appenders/test_email.rb +0 -170
- data/test/appenders/test_growl.rb +0 -138
- data/test/config/test_configurator.rb +0 -69
- data/test/config/test_yaml_configurator.rb +0 -39
- data/test/test_consolidate.rb +0 -45
- data/test/test_stats.rb +0 -273
- data/version.txt +0 -1
data/lib/rspec/logging_helper.rb
CHANGED
@@ -7,9 +7,9 @@ module RSpec
|
|
7
7
|
# supports a readline method to access the log messages.
|
8
8
|
#
|
9
9
|
def capture_log_messages( opts = {} )
|
10
|
-
from = opts.
|
11
|
-
to = opts.
|
12
|
-
exclusive = opts.
|
10
|
+
from = opts.fetch(:from, 'root')
|
11
|
+
to = opts.fetch(:to, '__rspec__')
|
12
|
+
exclusive = opts.fetch(:exclusive, true)
|
13
13
|
|
14
14
|
appender = Logging::Appenders[to] || Logging::Appenders::StringIo.new(to)
|
15
15
|
logger = Logging::Logger[from]
|
data/logging.gemspec
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
# stub: logging 2.0.0 ruby lib
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "logging"
|
6
|
+
s.version = "2.0.0"
|
7
|
+
|
8
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
|
+
s.require_paths = ["lib"]
|
10
|
+
s.authors = ["Tim Pease"]
|
11
|
+
s.date = "2015-03-29"
|
12
|
+
s.description = "Logging is a flexible logging library for use in Ruby programs based on the\ndesign of Java's log4j library. It features a hierarchical logging system,\ncustom level names, multiple output destinations per log event, custom\nformatting, and more."
|
13
|
+
s.email = "tim.pease@gmail.com"
|
14
|
+
s.extra_rdoc_files = ["History.txt"]
|
15
|
+
s.files = [".gitignore", ".travis.yml", "History.txt", "README.md", "Rakefile", "examples/appenders.rb", "examples/classes.rb", "examples/colorization.rb", "examples/custom_log_levels.rb", "examples/fork.rb", "examples/formatting.rb", "examples/hierarchies.rb", "examples/layouts.rb", "examples/lazy.rb", "examples/loggers.rb", "examples/mdc.rb", "examples/names.rb", "examples/rspec_integration.rb", "examples/simple.rb", "lib/logging.rb", "lib/logging/appender.rb", "lib/logging/appenders.rb", "lib/logging/appenders/buffering.rb", "lib/logging/appenders/console.rb", "lib/logging/appenders/file.rb", "lib/logging/appenders/io.rb", "lib/logging/appenders/rolling_file.rb", "lib/logging/appenders/string_io.rb", "lib/logging/appenders/syslog.rb", "lib/logging/color_scheme.rb", "lib/logging/diagnostic_context.rb", "lib/logging/filter.rb", "lib/logging/filters.rb", "lib/logging/filters/level.rb", "lib/logging/layout.rb", "lib/logging/layouts.rb", "lib/logging/layouts/basic.rb", "lib/logging/layouts/parseable.rb", "lib/logging/layouts/pattern.rb", "lib/logging/log_event.rb", "lib/logging/logger.rb", "lib/logging/proxy.rb", "lib/logging/rails_compat.rb", "lib/logging/repository.rb", "lib/logging/root_logger.rb", "lib/logging/utils.rb", "lib/logging/version.rb", "lib/rspec/logging_helper.rb", "lib/spec/logging_helper.rb", "logging.gemspec", "script/bootstrap", "test/appenders/test_buffered_io.rb", "test/appenders/test_console.rb", "test/appenders/test_file.rb", "test/appenders/test_io.rb", "test/appenders/test_periodic_flushing.rb", "test/appenders/test_rolling_file.rb", "test/appenders/test_string_io.rb", "test/appenders/test_syslog.rb", "test/benchmark.rb", "test/layouts/test_basic.rb", "test/layouts/test_color_pattern.rb", "test/layouts/test_json.rb", "test/layouts/test_pattern.rb", "test/layouts/test_yaml.rb", "test/setup.rb", "test/test_appender.rb", "test/test_color_scheme.rb", "test/test_filter.rb", "test/test_layout.rb", "test/test_log_event.rb", "test/test_logger.rb", "test/test_logging.rb", "test/test_mapped_diagnostic_context.rb", "test/test_nested_diagnostic_context.rb", "test/test_proxy.rb", "test/test_repository.rb", "test/test_root_logger.rb", "test/test_utils.rb"]
|
16
|
+
s.homepage = "http://rubygems.org/gems/logging"
|
17
|
+
s.rdoc_options = ["--main", "README.md"]
|
18
|
+
s.rubyforge_project = "logging"
|
19
|
+
s.rubygems_version = "2.2.2"
|
20
|
+
s.summary = "A flexible and extendable logging library for Ruby"
|
21
|
+
s.test_files = ["test/appenders/test_buffered_io.rb", "test/appenders/test_console.rb", "test/appenders/test_file.rb", "test/appenders/test_io.rb", "test/appenders/test_periodic_flushing.rb", "test/appenders/test_rolling_file.rb", "test/appenders/test_string_io.rb", "test/appenders/test_syslog.rb", "test/layouts/test_basic.rb", "test/layouts/test_color_pattern.rb", "test/layouts/test_json.rb", "test/layouts/test_pattern.rb", "test/layouts/test_yaml.rb", "test/test_appender.rb", "test/test_color_scheme.rb", "test/test_filter.rb", "test/test_layout.rb", "test/test_log_event.rb", "test/test_logger.rb", "test/test_logging.rb", "test/test_mapped_diagnostic_context.rb", "test/test_nested_diagnostic_context.rb", "test/test_proxy.rb", "test/test_repository.rb", "test/test_root_logger.rb", "test/test_utils.rb"]
|
22
|
+
|
23
|
+
if s.respond_to? :specification_version then
|
24
|
+
s.specification_version = 4
|
25
|
+
|
26
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
27
|
+
s.add_runtime_dependency(%q<little-plugger>, ["~> 1.1"])
|
28
|
+
s.add_runtime_dependency(%q<multi_json>, ["~> 1.10"])
|
29
|
+
s.add_development_dependency(%q<flexmock>, ["~> 1.0"])
|
30
|
+
s.add_development_dependency(%q<bones-git>, ["~> 1.3"])
|
31
|
+
s.add_development_dependency(%q<bones>, [">= 3.8.3"])
|
32
|
+
else
|
33
|
+
s.add_dependency(%q<little-plugger>, ["~> 1.1"])
|
34
|
+
s.add_dependency(%q<multi_json>, ["~> 1.10"])
|
35
|
+
s.add_dependency(%q<flexmock>, ["~> 1.0"])
|
36
|
+
s.add_dependency(%q<bones-git>, ["~> 1.3"])
|
37
|
+
s.add_dependency(%q<bones>, [">= 3.8.3"])
|
38
|
+
end
|
39
|
+
else
|
40
|
+
s.add_dependency(%q<little-plugger>, ["~> 1.1"])
|
41
|
+
s.add_dependency(%q<multi_json>, ["~> 1.10"])
|
42
|
+
s.add_dependency(%q<flexmock>, ["~> 1.0"])
|
43
|
+
s.add_dependency(%q<bones-git>, ["~> 1.3"])
|
44
|
+
s.add_dependency(%q<bones>, [">= 3.8.3"])
|
45
|
+
end
|
46
|
+
end
|
@@ -41,6 +41,26 @@ module TestAppenders
|
|
41
41
|
assert_raise(RuntimeError) {@appender.append event}
|
42
42
|
end
|
43
43
|
|
44
|
+
def test_append_with_write_size
|
45
|
+
event = Logging::LogEvent.new('TestLogger', @levels['warn'], %w[a b c d], false)
|
46
|
+
@appender.write_size = 2
|
47
|
+
|
48
|
+
@appender.append event
|
49
|
+
assert_nil(readline)
|
50
|
+
|
51
|
+
@appender.append event
|
52
|
+
assert_nil(readline)
|
53
|
+
|
54
|
+
event.level = @levels['debug']
|
55
|
+
event.data = 'the big log message'
|
56
|
+
@appender.append event
|
57
|
+
|
58
|
+
assert_equal " WARN TestLogger : <Array> #{%w[a b c d]}\n", readline
|
59
|
+
assert_equal " WARN TestLogger : <Array> #{%w[a b c d]}\n", readline
|
60
|
+
assert_equal "DEBUG TestLogger : the big log message\n", readline
|
61
|
+
assert_nil(readline)
|
62
|
+
end
|
63
|
+
|
44
64
|
def test_append_error
|
45
65
|
# setup an internal logger to capture error messages from the IO
|
46
66
|
# appender
|
@@ -147,6 +167,15 @@ module TestAppenders
|
|
147
167
|
assert_nil(readline)
|
148
168
|
end
|
149
169
|
|
170
|
+
def test_clear
|
171
|
+
@appender << "this is a test message\n"
|
172
|
+
@appender << "this is another test message\n"
|
173
|
+
|
174
|
+
@appender.clear!
|
175
|
+
@appender.flush
|
176
|
+
assert_nil(readline)
|
177
|
+
end
|
178
|
+
|
150
179
|
def test_immediate_at
|
151
180
|
event = Logging::LogEvent.new('TestLogger', @levels['warn'],
|
152
181
|
[1, 2, 3, 4], false)
|
data/test/appenders/test_file.rb
CHANGED
@@ -42,7 +42,7 @@ module TestAppenders
|
|
42
42
|
|
43
43
|
def test_initialize
|
44
44
|
log = File.join(TMP, 'file.log')
|
45
|
-
appender = Logging.appenders.file(NAME,
|
45
|
+
appender = Logging.appenders.file(NAME, :filename => log)
|
46
46
|
assert_equal 'logfile', appender.name
|
47
47
|
assert_equal ::File.expand_path(log), appender.filename
|
48
48
|
appender << "This will be the first line\n"
|
@@ -82,7 +82,7 @@ module TestAppenders
|
|
82
82
|
|
83
83
|
def test_changing_directories
|
84
84
|
log = File.join(TMP, 'file.log')
|
85
|
-
appender = Logging.appenders.file(NAME,
|
85
|
+
appender = Logging.appenders.file(NAME, :filename => log)
|
86
86
|
|
87
87
|
assert_equal 'logfile', appender.name
|
88
88
|
assert_equal ::File.expand_path(log), appender.filename
|
@@ -111,7 +111,7 @@ module TestAppenders
|
|
111
111
|
Dir.glob(d_glob).each {|fn| ::File.delete fn}
|
112
112
|
cleanup
|
113
113
|
|
114
|
-
ap = Logging.appenders.rolling_file(NAME, :filename => @fn,
|
114
|
+
ap = Logging.appenders.rolling_file(NAME, :filename => @fn, :age => 'daily')
|
115
115
|
ap << "random message\n"
|
116
116
|
assert_equal 1, Dir.glob(@glob).length
|
117
117
|
|
@@ -242,6 +242,67 @@ module TestAppenders
|
|
242
242
|
cleanup
|
243
243
|
end
|
244
244
|
|
245
|
+
def test_custom_numberd_filename
|
246
|
+
fn = File.expand_path('test.log{{.%d}}', TMP)
|
247
|
+
filename = File.expand_path('test.log', TMP)
|
248
|
+
glob = File.expand_path('test.log.*', TMP)
|
249
|
+
|
250
|
+
assert_equal [], Dir.glob(glob)
|
251
|
+
ap = Logging.appenders.rolling_file(NAME, :filename => fn, :size => 100, :keep => 2)
|
252
|
+
|
253
|
+
ap << 'X' * 100; ap.flush
|
254
|
+
assert_equal 0, Dir.glob(glob).length
|
255
|
+
assert_equal 100, File.size(filename)
|
256
|
+
|
257
|
+
# this character is appended to the log file (bringing its size to 101)
|
258
|
+
# and THEN the file is rolled resulting in a new, empty log file
|
259
|
+
ap << 'X'
|
260
|
+
assert_equal 1, Dir.glob(glob).length
|
261
|
+
assert_equal 0, File.size(filename)
|
262
|
+
|
263
|
+
ap << 'Y' * 100; ap.flush
|
264
|
+
assert_equal 1, Dir.glob(glob).length
|
265
|
+
assert_equal 100, File.size(filename)
|
266
|
+
|
267
|
+
ap << 'Y'
|
268
|
+
assert_equal 2, Dir.glob(glob).length
|
269
|
+
assert_equal 0, File.size(filename)
|
270
|
+
|
271
|
+
# now make sure we prune the correct file
|
272
|
+
ap << 'Z' * 101; ap.flush
|
273
|
+
files = Dir.glob(glob).sort
|
274
|
+
assert_equal 2, files.length
|
275
|
+
assert_equal 'Z'*101, ::File.read(files.first)
|
276
|
+
assert_equal 'Y'*101, ::File.read(files.last)
|
277
|
+
|
278
|
+
cleanup
|
279
|
+
end
|
280
|
+
|
281
|
+
def test_custom_timestamp_filename
|
282
|
+
fn = File.expand_path('test{{.%S:%M}}.log', TMP)
|
283
|
+
filename = File.expand_path('test.log', TMP)
|
284
|
+
age_file = filename + '.age'
|
285
|
+
glob = File.expand_path('test.*.log', TMP)
|
286
|
+
|
287
|
+
assert_equal [], Dir.glob(glob)
|
288
|
+
ap = Logging.appenders.rolling_file(NAME, :filename => fn, :age => 1, :keep => 2)
|
289
|
+
|
290
|
+
ap << "random message\n"
|
291
|
+
assert_equal 0, Dir.glob(glob).length
|
292
|
+
|
293
|
+
now = ::File.mtime(age_file)
|
294
|
+
start = now - 42
|
295
|
+
::File.utime(start, start, age_file)
|
296
|
+
ap.instance_variable_set(:@age_fn_mtime, nil)
|
297
|
+
ap << "another random message\n"
|
298
|
+
|
299
|
+
files = Dir.glob(glob)
|
300
|
+
assert_equal 1, files.length
|
301
|
+
assert_match %r/test\.\d{2}:\d{2}\.log\z/, files.first
|
302
|
+
|
303
|
+
cleanup
|
304
|
+
end
|
305
|
+
|
245
306
|
private
|
246
307
|
def cleanup
|
247
308
|
unless Logging.appenders[NAME].nil?
|
@@ -77,7 +77,7 @@ module TestLayouts
|
|
77
77
|
event = Logging::LogEvent.new('ArrayLogger', @levels['info'], 'log message', false)
|
78
78
|
|
79
79
|
rgxp = Regexp.new(
|
80
|
-
'^\['+Regexp.escape(CS::BLUE)+'\d{4}-\d{2}-\d{2}
|
80
|
+
'^\['+Regexp.escape(CS::BLUE)+'\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}'+Regexp.escape(CS::RESET)+
|
81
81
|
'\] INFO -- '+Regexp.escape(CS::GREEN)+'ArrayLogger'+Regexp.escape(CS::RESET)+
|
82
82
|
' : '+Regexp.escape(CS::MAGENTA)+'log message'+Regexp.escape(CS::RESET)
|
83
83
|
)
|
data/test/layouts/test_json.rb
CHANGED
@@ -98,6 +98,9 @@ module TestLayouts
|
|
98
98
|
@layout.items = %w[method]
|
99
99
|
assert_equal %Q[{"method":"method_name"}\n], @layout.format(event)
|
100
100
|
|
101
|
+
@layout.items = %w[hostname]
|
102
|
+
assert_equal %Q[{"hostname":"#{Socket.gethostname}"}\n], @layout.format(event)
|
103
|
+
|
101
104
|
@layout.items = %w[pid]
|
102
105
|
assert_match %r/\A\{"pid":\d+\}\n\z/, @layout.format(event)
|
103
106
|
|
@@ -11,7 +11,7 @@ module TestLayouts
|
|
11
11
|
super
|
12
12
|
@layout = Logging.layouts.pattern({})
|
13
13
|
@levels = Logging::LEVELS
|
14
|
-
@date_fmt = '\d{4}-\d{2}-\d{2}
|
14
|
+
@date_fmt = '\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}'
|
15
15
|
Thread.current[:name] = nil
|
16
16
|
end
|
17
17
|
|
@@ -42,7 +42,7 @@ module TestLayouts
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def test_date_pattern
|
45
|
-
assert_equal '%Y-%m-%
|
45
|
+
assert_equal '%Y-%m-%dT%H:%M:%S', @layout.date_pattern
|
46
46
|
end
|
47
47
|
|
48
48
|
def test_date_pattern_eq
|
@@ -142,6 +142,10 @@ module TestLayouts
|
|
142
142
|
Thread.current[:name] = "Main"
|
143
143
|
assert_equal "Main", @layout.format(event)
|
144
144
|
|
145
|
+
@layout.pattern = '%h'
|
146
|
+
hostname = Socket.gethostname
|
147
|
+
assert_equal hostname, @layout.format(event)
|
148
|
+
|
145
149
|
@layout.pattern = '%%'
|
146
150
|
assert_equal '%', @layout.format(event)
|
147
151
|
|
data/test/layouts/test_yaml.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require 'time'
|
2
2
|
require File.expand_path('../setup', File.dirname(__FILE__))
|
3
3
|
|
4
4
|
module TestLogging
|
@@ -88,6 +88,9 @@ module TestLayouts
|
|
88
88
|
@layout.items = %w[method]
|
89
89
|
assert_match %r/\A--- ?\nmethod: method_name\n/, @layout.format(event)
|
90
90
|
|
91
|
+
@layout.items = %w[hostname]
|
92
|
+
assert_match %r/\A--- ?\nhostname: #{Socket.gethostname}\n/, @layout.format(event)
|
93
|
+
|
91
94
|
@layout.items = %w[pid]
|
92
95
|
assert_match %r/\A--- ?\npid: \d+\n\z/, @layout.format(event)
|
93
96
|
|
data/test/test_appender.rb
CHANGED
@@ -40,6 +40,54 @@ module TestLogging
|
|
40
40
|
assert_raise(RuntimeError) {@appender.append @event}
|
41
41
|
end
|
42
42
|
|
43
|
+
def test_append_with_filter
|
44
|
+
ary = []
|
45
|
+
@appender.instance_variable_set :@ary, ary
|
46
|
+
def @appender.write(event)
|
47
|
+
@ary << event
|
48
|
+
end
|
49
|
+
@appender.level = :debug
|
50
|
+
|
51
|
+
# Excluded
|
52
|
+
@appender.filters = ::Logging::Filters::Level.new :info
|
53
|
+
@appender.append @event
|
54
|
+
assert_nil ary.pop
|
55
|
+
|
56
|
+
# Allowed
|
57
|
+
@appender.filters = ::Logging::Filters::Level.new :debug
|
58
|
+
@appender.append @event
|
59
|
+
assert_equal @event, ary.pop
|
60
|
+
|
61
|
+
# No filter
|
62
|
+
@appender.filters = nil
|
63
|
+
@appender.append @event
|
64
|
+
assert_equal @event, ary.pop
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_append_with_modifying_filter
|
68
|
+
ary = []
|
69
|
+
@appender.instance_variable_set :@ary, ary
|
70
|
+
def @appender.write(event)
|
71
|
+
@ary << event
|
72
|
+
end
|
73
|
+
@appender.level = :debug
|
74
|
+
@appender.filters = [
|
75
|
+
::Logging::Filters::Level.new(:debug, :info),
|
76
|
+
RedactFilter.new
|
77
|
+
]
|
78
|
+
|
79
|
+
# data will be redacted
|
80
|
+
@appender.append @event
|
81
|
+
event = ary.pop
|
82
|
+
assert_not_same @event, event
|
83
|
+
assert_equal "REDACTED!", event.data
|
84
|
+
|
85
|
+
# event will be filtered out
|
86
|
+
@event.level = @levels['warn']
|
87
|
+
@appender.append @event
|
88
|
+
assert_nil ary.pop
|
89
|
+
end
|
90
|
+
|
43
91
|
def test_close
|
44
92
|
assert_equal false, @appender.closed?
|
45
93
|
|
@@ -149,3 +197,11 @@ module TestLogging
|
|
149
197
|
end # class TestAppender
|
150
198
|
end # module TestLogging
|
151
199
|
|
200
|
+
class RedactFilter < ::Logging::Filter
|
201
|
+
def allow( event )
|
202
|
+
event = event.dup
|
203
|
+
event.data = "REDACTED!"
|
204
|
+
event
|
205
|
+
end
|
206
|
+
end
|
207
|
+
|
data/test/test_filter.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require File.expand_path('setup', File.dirname(__FILE__))
|
2
|
+
|
3
|
+
module TestLogging
|
4
|
+
|
5
|
+
class TestFilter < Test::Unit::TestCase
|
6
|
+
include LoggingTestCase
|
7
|
+
|
8
|
+
def setup
|
9
|
+
super
|
10
|
+
|
11
|
+
::Logging::init
|
12
|
+
@lf = ::Logging::Filters::Level.new :debug, :warn
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_level_filter_includes_selected_level
|
16
|
+
debug_evt = event_for_level(:debug)
|
17
|
+
warn_evt = event_for_level(:warn)
|
18
|
+
assert_same debug_evt, @lf.allow(debug_evt), "Debug messages should be allowed"
|
19
|
+
assert_same warn_evt, @lf.allow(warn_evt), "Warn messages should be allowed"
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_level_filter_excludes_unselected_level
|
23
|
+
event = event_for_level(:info)
|
24
|
+
assert_nil @lf.allow(event), "Info messages should be disallowed"
|
25
|
+
end
|
26
|
+
|
27
|
+
def event_for_level(level)
|
28
|
+
::Logging::LogEvent.new('logger', ::Logging::LEVELS[level.to_s],
|
29
|
+
'message', false)
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
data/test/test_layout.rb
CHANGED
@@ -20,16 +20,16 @@ module TestLogging
|
|
20
20
|
|
21
21
|
assert_equal :string, obj_format[@layout]
|
22
22
|
|
23
|
-
@layout = ::Logging::Layout.new
|
23
|
+
@layout = ::Logging::Layout.new :format_as => 'blah'
|
24
24
|
assert_equal :string, obj_format[@layout]
|
25
25
|
|
26
26
|
@layout = ::Logging::Layout.new :format_as => :inspect
|
27
27
|
assert_equal :inspect, obj_format[@layout]
|
28
28
|
|
29
|
-
@layout = ::Logging::Layout.new
|
29
|
+
@layout = ::Logging::Layout.new :format_as => :json
|
30
30
|
assert_equal :json, obj_format[@layout]
|
31
31
|
|
32
|
-
@layout = ::Logging::Layout.new
|
32
|
+
@layout = ::Logging::Layout.new :format_as => :yaml
|
33
33
|
assert_equal :yaml, obj_format[@layout]
|
34
34
|
|
35
35
|
@layout = ::Logging::Layout.new
|
@@ -85,11 +85,7 @@ module TestLogging
|
|
85
85
|
assert_match %r/\A<Array> \n--- ?\n- one\n- two\n- three\n- four\n/, r
|
86
86
|
|
87
87
|
r = @layout.format_obj Class
|
88
|
-
|
89
|
-
assert_equal "<Class> \n--- !ruby/class 'Class'\n", r
|
90
|
-
else
|
91
|
-
assert_equal "<Class> Class", r
|
92
|
-
end
|
88
|
+
assert_match %r/\A<Class> (\n--- !ruby\/class ')?Class('\n)?/, r
|
93
89
|
end
|
94
90
|
|
95
91
|
def test_format_obj_without_backtrace
|
data/test/test_log_event.rb
CHANGED
@@ -29,7 +29,7 @@ module TestLogging
|
|
29
29
|
def test_file
|
30
30
|
assert_equal '', @event.file
|
31
31
|
|
32
|
-
@logger.
|
32
|
+
@logger.caller_tracing = true
|
33
33
|
@logger.warn 'warning message'
|
34
34
|
assert_match %r/test_log_event.rb\z/, @appender.event.file
|
35
35
|
end
|
@@ -46,7 +46,7 @@ module TestLogging
|
|
46
46
|
def test_line
|
47
47
|
assert_equal '', @event.file
|
48
48
|
|
49
|
-
@logger.
|
49
|
+
@logger.caller_tracing = true
|
50
50
|
@logger.error 'error message'
|
51
51
|
assert_equal __LINE__-1, @appender.event.line
|
52
52
|
end
|
@@ -63,7 +63,7 @@ module TestLogging
|
|
63
63
|
def test_method
|
64
64
|
assert_equal '', @event.file
|
65
65
|
|
66
|
-
@logger.
|
66
|
+
@logger.caller_tracing = true
|
67
67
|
@logger.debug 'debug message'
|
68
68
|
assert_equal 'test_method', @appender.event.method
|
69
69
|
end
|
data/test/test_logger.rb
CHANGED
@@ -406,6 +406,33 @@ module TestLogging
|
|
406
406
|
assert_equal true, logb.info?
|
407
407
|
end
|
408
408
|
|
409
|
+
def test_level_with_filter
|
410
|
+
root = ::Logging::Logger[:root]
|
411
|
+
root.level = 'debug'
|
412
|
+
|
413
|
+
details_filter = ::Logging::Filters::Level.new :debug
|
414
|
+
error_filter = ::Logging::Filters::Level.new :error
|
415
|
+
|
416
|
+
a_detail = ::Logging::Appenders::StringIo.new 'detail', :filters => details_filter
|
417
|
+
a_error = ::Logging::Appenders::StringIo.new 'error', :filters => error_filter
|
418
|
+
|
419
|
+
root.add_appenders a_detail, a_error
|
420
|
+
|
421
|
+
log = ::Logging::Logger.new 'A Logger'
|
422
|
+
|
423
|
+
log.debug "debug level"
|
424
|
+
assert_equal "DEBUG A Logger : debug level\n", a_detail.readline
|
425
|
+
assert_nil a_error.readline
|
426
|
+
|
427
|
+
log.error "error level"
|
428
|
+
assert_nil a_detail.readline
|
429
|
+
assert_equal "ERROR A Logger : error level\n", a_error.readline
|
430
|
+
|
431
|
+
log.warn "warn level"
|
432
|
+
assert_nil a_detail.readline
|
433
|
+
assert_nil a_error.readline
|
434
|
+
end
|
435
|
+
|
409
436
|
def test_log
|
410
437
|
root = ::Logging::Logger[:root]
|
411
438
|
root.level = 'info'
|
@@ -598,40 +625,40 @@ module TestLogging
|
|
598
625
|
assert_raise(ArgumentError) {::Logging::Logger[:root] <=> 'string'}
|
599
626
|
end
|
600
627
|
|
601
|
-
def
|
628
|
+
def test_caller_tracing
|
602
629
|
log = ::Logging::Logger[:root]
|
603
|
-
assert_equal false, log.
|
630
|
+
assert_equal false, log.caller_tracing
|
604
631
|
|
605
|
-
log.
|
606
|
-
assert_equal true, log.
|
632
|
+
log.caller_tracing = true
|
633
|
+
assert_equal true, log.caller_tracing
|
607
634
|
|
608
635
|
log = ::Logging::Logger['A']
|
609
|
-
assert_equal false, log.
|
636
|
+
assert_equal false, log.caller_tracing
|
610
637
|
|
611
|
-
log.
|
612
|
-
assert_equal true, log.
|
638
|
+
log.caller_tracing = true
|
639
|
+
assert_equal true, log.caller_tracing
|
613
640
|
end
|
614
641
|
|
615
|
-
def
|
642
|
+
def test_caller_trace_eq
|
616
643
|
log = ::Logging::Logger.new 'A'
|
617
|
-
assert_equal false, log.
|
644
|
+
assert_equal false, log.caller_tracing
|
618
645
|
|
619
|
-
log.
|
620
|
-
assert_equal true, log.
|
646
|
+
log.caller_tracing = true
|
647
|
+
assert_equal true, log.caller_tracing
|
621
648
|
|
622
|
-
log.
|
623
|
-
assert_equal false, log.
|
649
|
+
log.caller_tracing = false
|
650
|
+
assert_equal false, log.caller_tracing
|
624
651
|
|
625
|
-
log.
|
626
|
-
assert_equal true, log.
|
652
|
+
log.caller_tracing = 'true'
|
653
|
+
assert_equal true, log.caller_tracing
|
627
654
|
|
628
|
-
log.
|
629
|
-
assert_equal false, log.
|
655
|
+
log.caller_tracing = 'false'
|
656
|
+
assert_equal false, log.caller_tracing
|
630
657
|
|
631
|
-
log.
|
632
|
-
assert_equal false, log.
|
658
|
+
log.caller_tracing = nil
|
659
|
+
assert_equal false, log.caller_tracing
|
633
660
|
|
634
|
-
assert_raise(ArgumentError) {log.
|
661
|
+
assert_raise(ArgumentError) {log.caller_tracing = Object}
|
635
662
|
end
|
636
663
|
|
637
664
|
def test_dump_configuration
|
@@ -640,57 +667,54 @@ module TestLogging
|
|
640
667
|
log_c = ::Logging::Logger['A-logger::B-logger::C-logger']
|
641
668
|
log_d = ::Logging::Logger['A-logger::D-logger']
|
642
669
|
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
log_a._dump_configuration( sio )
|
647
|
-
assert_equal(
|
648
|
-
"A-logger ........................................ debug +A -T\n", sio.to_s)
|
670
|
+
assert_equal \
|
671
|
+
"A-logger ........................................ debug +A -T\n",
|
672
|
+
log_a._dump_configuration
|
649
673
|
|
650
|
-
|
651
|
-
|
652
|
-
|
674
|
+
assert_equal \
|
675
|
+
"A-logger::B-logger .............................. debug +A -T\n",
|
676
|
+
log_b._dump_configuration
|
653
677
|
|
654
|
-
|
655
|
-
|
656
|
-
|
678
|
+
assert_equal \
|
679
|
+
"A-logger::B-logger::C-logger .................... debug +A -T\n",
|
680
|
+
log_c._dump_configuration
|
657
681
|
|
658
|
-
|
659
|
-
|
660
|
-
|
682
|
+
assert_equal \
|
683
|
+
"A-logger::D-logger .............................. debug +A -T\n",
|
684
|
+
log_d._dump_configuration
|
661
685
|
|
662
686
|
log_b.level = :warn
|
663
|
-
log_b.
|
664
|
-
|
665
|
-
|
666
|
-
|
687
|
+
log_b.caller_tracing = true
|
688
|
+
assert_equal \
|
689
|
+
"A-logger::B-logger .............................. *warn +A +T\n",
|
690
|
+
log_b._dump_configuration
|
667
691
|
|
668
692
|
log_c.additive = false
|
669
|
-
|
670
|
-
|
671
|
-
|
693
|
+
assert_equal \
|
694
|
+
"A-logger::B-logger::C-logger .................... warn -A -T\n",
|
695
|
+
log_c._dump_configuration
|
672
696
|
|
673
697
|
# with an indent specified
|
674
|
-
|
675
|
-
|
676
|
-
|
698
|
+
assert_equal \
|
699
|
+
" A-logger .................................... debug +A -T\n",
|
700
|
+
log_a._dump_configuration(4)
|
677
701
|
|
678
|
-
|
679
|
-
|
680
|
-
|
702
|
+
assert_equal \
|
703
|
+
" A-logger::B-logger ...................... *warn +A +T\n",
|
704
|
+
log_b._dump_configuration(8)
|
681
705
|
|
682
|
-
|
683
|
-
|
684
|
-
|
706
|
+
assert_equal \
|
707
|
+
" A-logger::B-logger::C-logger .......... warn -A -T\n",
|
708
|
+
log_c._dump_configuration(10)
|
685
709
|
|
686
|
-
|
687
|
-
|
688
|
-
|
710
|
+
assert_equal \
|
711
|
+
" A-logger::D-logger ........ debug +A -T\n",
|
712
|
+
log_d._dump_configuration(22)
|
689
713
|
|
690
714
|
log_c.level = 0
|
691
|
-
|
692
|
-
|
693
|
-
|
715
|
+
assert_equal \
|
716
|
+
" A-logger::B...::C-logger *debug -A -T\n",
|
717
|
+
log_c._dump_configuration(26)
|
694
718
|
end
|
695
719
|
|
696
720
|
end # class TestLogger
|