logging 2.0.0 → 2.3.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 +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +8 -5
- data/History.txt +59 -0
- data/LICENSE +22 -0
- data/README.md +20 -41
- data/Rakefile +2 -2
- data/examples/appenders.rb +1 -1
- data/examples/layouts.rb +1 -1
- data/examples/lazy.rb +1 -1
- data/examples/mdc.rb +2 -2
- data/examples/rails4.rb +21 -0
- data/examples/reusing_layouts.rb +51 -0
- data/lib/logging.rb +99 -9
- data/lib/logging/appender.rb +13 -34
- data/lib/logging/appenders/buffering.rb +130 -59
- data/lib/logging/appenders/console.rb +68 -57
- data/lib/logging/appenders/file.rb +43 -22
- data/lib/logging/appenders/io.rb +22 -16
- data/lib/logging/appenders/rolling_file.rb +60 -26
- data/lib/logging/appenders/string_io.rb +1 -1
- data/lib/logging/appenders/syslog.rb +3 -4
- data/lib/logging/color_scheme.rb +1 -1
- data/lib/logging/diagnostic_context.rb +100 -73
- data/lib/logging/layout.rb +144 -16
- data/lib/logging/layouts/parseable.rb +50 -12
- data/lib/logging/layouts/pattern.rb +8 -9
- data/lib/logging/log_event.rb +19 -12
- data/lib/logging/logger.rb +117 -95
- data/lib/logging/proxy.rb +1 -1
- data/lib/logging/rails_compat.rb +4 -13
- data/lib/logging/version.rb +1 -1
- data/logging.gemspec +31 -32
- data/script/console +8 -0
- data/test/appenders/{test_periodic_flushing.rb → test_async_flushing.rb} +67 -14
- data/test/appenders/test_buffered_io.rb +19 -18
- data/test/appenders/test_console.rb +55 -12
- data/test/appenders/test_file.rb +48 -28
- data/test/appenders/test_rolling_file.rb +18 -12
- data/test/appenders/test_syslog.rb +6 -0
- data/test/benchmark.rb +42 -18
- data/test/layouts/test_json.rb +14 -1
- data/test/layouts/test_nested_exceptions.rb +124 -0
- data/test/layouts/test_pattern.rb +16 -3
- data/test/layouts/test_yaml.rb +15 -1
- data/test/performance.rb +66 -0
- data/test/setup.rb +26 -30
- data/test/test_appender.rb +2 -4
- data/test/test_layout.rb +49 -0
- data/test/test_log_event.rb +10 -2
- data/test/test_logger.rb +20 -3
- data/test/test_logging.rb +75 -4
- data/test/test_mapped_diagnostic_context.rb +15 -6
- data/test/test_nested_diagnostic_context.rb +6 -1
- metadata +23 -17
data/lib/logging/proxy.rb
CHANGED
@@ -47,7 +47,7 @@ module Logging
|
|
47
47
|
|
48
48
|
# All hail the magic of method missing. Here is where we are going to log
|
49
49
|
# the method call and then forward to the proxied object. The return value
|
50
|
-
# from the proxied
|
50
|
+
# from the proxied object method call is passed back.
|
51
51
|
#
|
52
52
|
def method_missing( name, *args, &block )
|
53
53
|
@logger << "#@leader#{name}(#{args.inspect[1..-2]})\n"
|
data/lib/logging/rails_compat.rb
CHANGED
@@ -1,6 +1,3 @@
|
|
1
|
-
|
2
|
-
if defined? ActiveSupport
|
3
|
-
|
4
1
|
module Logging
|
5
2
|
|
6
3
|
# Rails compatibility module.
|
@@ -9,10 +6,9 @@ module Logging
|
|
9
6
|
# some Rails extensions expect these methods to exist. Those methods are
|
10
7
|
# implemented in this module and included in the Logging::Logger class when
|
11
8
|
# the ActiveSupport gem is present.
|
12
|
-
#
|
13
9
|
module RailsCompat
|
14
10
|
|
15
|
-
# A no-op implementation of the
|
11
|
+
# A no-op implementation of the `formatter` method.
|
16
12
|
def formatter; end
|
17
13
|
|
18
14
|
# A no-op implementation of the +silence+ method. Setting of log levels
|
@@ -20,17 +16,12 @@ module Logging
|
|
20
16
|
# opinion that overriding the log level programmatically is a logical
|
21
17
|
# error.
|
22
18
|
#
|
23
|
-
# Please see https://github.com/TwP/logging/issues/11 for a more
|
19
|
+
# Please see https://github.com/TwP/logging/issues/11 for a more detailed
|
24
20
|
# discussion of the issue.
|
25
|
-
#
|
26
21
|
def silence( *args )
|
27
22
|
yield self
|
28
23
|
end
|
29
|
-
|
30
|
-
end # RailsCompat
|
24
|
+
end
|
31
25
|
|
32
26
|
Logger.send :include, RailsCompat
|
33
|
-
|
34
|
-
end # Logging
|
35
|
-
end # if defined?
|
36
|
-
|
27
|
+
end
|
data/lib/logging/version.rb
CHANGED
data/logging.gemspec
CHANGED
@@ -1,46 +1,45 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: logging 2.
|
2
|
+
# stub: logging 2.3.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
|
-
s.name = "logging"
|
6
|
-
s.version = "2.
|
5
|
+
s.name = "logging".freeze
|
6
|
+
s.version = "2.3.0"
|
7
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 = "
|
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/
|
16
|
-
s.homepage = "http://rubygems.org/gems/logging"
|
17
|
-
s.rdoc_options = ["--main", "README.md"]
|
18
|
-
s.
|
19
|
-
s.
|
20
|
-
s.
|
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"]
|
8
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
|
+
s.require_paths = ["lib".freeze]
|
10
|
+
s.authors = ["Tim Pease".freeze]
|
11
|
+
s.date = "2020-07-04"
|
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.".freeze
|
13
|
+
s.email = "tim.pease@gmail.com".freeze
|
14
|
+
s.extra_rdoc_files = ["History.txt".freeze]
|
15
|
+
s.files = [".gitignore".freeze, ".travis.yml".freeze, "History.txt".freeze, "LICENSE".freeze, "README.md".freeze, "Rakefile".freeze, "examples/appenders.rb".freeze, "examples/classes.rb".freeze, "examples/colorization.rb".freeze, "examples/custom_log_levels.rb".freeze, "examples/fork.rb".freeze, "examples/formatting.rb".freeze, "examples/hierarchies.rb".freeze, "examples/layouts.rb".freeze, "examples/lazy.rb".freeze, "examples/loggers.rb".freeze, "examples/mdc.rb".freeze, "examples/names.rb".freeze, "examples/rails4.rb".freeze, "examples/reusing_layouts.rb".freeze, "examples/rspec_integration.rb".freeze, "examples/simple.rb".freeze, "lib/logging.rb".freeze, "lib/logging/appender.rb".freeze, "lib/logging/appenders.rb".freeze, "lib/logging/appenders/buffering.rb".freeze, "lib/logging/appenders/console.rb".freeze, "lib/logging/appenders/file.rb".freeze, "lib/logging/appenders/io.rb".freeze, "lib/logging/appenders/rolling_file.rb".freeze, "lib/logging/appenders/string_io.rb".freeze, "lib/logging/appenders/syslog.rb".freeze, "lib/logging/color_scheme.rb".freeze, "lib/logging/diagnostic_context.rb".freeze, "lib/logging/filter.rb".freeze, "lib/logging/filters.rb".freeze, "lib/logging/filters/level.rb".freeze, "lib/logging/layout.rb".freeze, "lib/logging/layouts.rb".freeze, "lib/logging/layouts/basic.rb".freeze, "lib/logging/layouts/parseable.rb".freeze, "lib/logging/layouts/pattern.rb".freeze, "lib/logging/log_event.rb".freeze, "lib/logging/logger.rb".freeze, "lib/logging/proxy.rb".freeze, "lib/logging/rails_compat.rb".freeze, "lib/logging/repository.rb".freeze, "lib/logging/root_logger.rb".freeze, "lib/logging/utils.rb".freeze, "lib/logging/version.rb".freeze, "lib/rspec/logging_helper.rb".freeze, "lib/spec/logging_helper.rb".freeze, "logging.gemspec".freeze, "script/bootstrap".freeze, "script/console".freeze, "test/appenders/test_async_flushing.rb".freeze, "test/appenders/test_buffered_io.rb".freeze, "test/appenders/test_console.rb".freeze, "test/appenders/test_file.rb".freeze, "test/appenders/test_io.rb".freeze, "test/appenders/test_rolling_file.rb".freeze, "test/appenders/test_string_io.rb".freeze, "test/appenders/test_syslog.rb".freeze, "test/benchmark.rb".freeze, "test/layouts/test_basic.rb".freeze, "test/layouts/test_color_pattern.rb".freeze, "test/layouts/test_json.rb".freeze, "test/layouts/test_nested_exceptions.rb".freeze, "test/layouts/test_pattern.rb".freeze, "test/layouts/test_yaml.rb".freeze, "test/performance.rb".freeze, "test/setup.rb".freeze, "test/test_appender.rb".freeze, "test/test_color_scheme.rb".freeze, "test/test_filter.rb".freeze, "test/test_layout.rb".freeze, "test/test_log_event.rb".freeze, "test/test_logger.rb".freeze, "test/test_logging.rb".freeze, "test/test_mapped_diagnostic_context.rb".freeze, "test/test_nested_diagnostic_context.rb".freeze, "test/test_proxy.rb".freeze, "test/test_repository.rb".freeze, "test/test_root_logger.rb".freeze, "test/test_utils.rb".freeze]
|
16
|
+
s.homepage = "http://rubygems.org/gems/logging".freeze
|
17
|
+
s.rdoc_options = ["--main".freeze, "README.md".freeze]
|
18
|
+
s.rubygems_version = "3.0.1".freeze
|
19
|
+
s.summary = "A flexible and extendable logging library for Ruby".freeze
|
20
|
+
s.test_files = ["test/appenders/test_async_flushing.rb".freeze, "test/appenders/test_buffered_io.rb".freeze, "test/appenders/test_console.rb".freeze, "test/appenders/test_file.rb".freeze, "test/appenders/test_io.rb".freeze, "test/appenders/test_rolling_file.rb".freeze, "test/appenders/test_string_io.rb".freeze, "test/appenders/test_syslog.rb".freeze, "test/layouts/test_basic.rb".freeze, "test/layouts/test_color_pattern.rb".freeze, "test/layouts/test_json.rb".freeze, "test/layouts/test_nested_exceptions.rb".freeze, "test/layouts/test_pattern.rb".freeze, "test/layouts/test_yaml.rb".freeze, "test/test_appender.rb".freeze, "test/test_color_scheme.rb".freeze, "test/test_filter.rb".freeze, "test/test_layout.rb".freeze, "test/test_log_event.rb".freeze, "test/test_logger.rb".freeze, "test/test_logging.rb".freeze, "test/test_mapped_diagnostic_context.rb".freeze, "test/test_nested_diagnostic_context.rb".freeze, "test/test_proxy.rb".freeze, "test/test_repository.rb".freeze, "test/test_root_logger.rb".freeze, "test/test_utils.rb".freeze]
|
22
21
|
|
23
22
|
if s.respond_to? :specification_version then
|
24
23
|
s.specification_version = 4
|
25
24
|
|
26
25
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
27
|
-
s.add_runtime_dependency(%q<little-plugger
|
28
|
-
s.add_runtime_dependency(%q<multi_json
|
29
|
-
s.add_development_dependency(%q<
|
30
|
-
s.add_development_dependency(%q<bones-git
|
31
|
-
s.add_development_dependency(%q<bones
|
26
|
+
s.add_runtime_dependency(%q<little-plugger>.freeze, ["~> 1.1"])
|
27
|
+
s.add_runtime_dependency(%q<multi_json>.freeze, ["~> 1.14"])
|
28
|
+
s.add_development_dependency(%q<test-unit>.freeze, ["~> 3.3"])
|
29
|
+
s.add_development_dependency(%q<bones-git>.freeze, ["~> 1.3"])
|
30
|
+
s.add_development_dependency(%q<bones>.freeze, [">= 3.8.4"])
|
32
31
|
else
|
33
|
-
s.add_dependency(%q<little-plugger
|
34
|
-
s.add_dependency(%q<multi_json
|
35
|
-
s.add_dependency(%q<
|
36
|
-
s.add_dependency(%q<bones-git
|
37
|
-
s.add_dependency(%q<bones
|
32
|
+
s.add_dependency(%q<little-plugger>.freeze, ["~> 1.1"])
|
33
|
+
s.add_dependency(%q<multi_json>.freeze, ["~> 1.14"])
|
34
|
+
s.add_dependency(%q<test-unit>.freeze, ["~> 3.3"])
|
35
|
+
s.add_dependency(%q<bones-git>.freeze, ["~> 1.3"])
|
36
|
+
s.add_dependency(%q<bones>.freeze, [">= 3.8.4"])
|
38
37
|
end
|
39
38
|
else
|
40
|
-
s.add_dependency(%q<little-plugger
|
41
|
-
s.add_dependency(%q<multi_json
|
42
|
-
s.add_dependency(%q<
|
43
|
-
s.add_dependency(%q<bones-git
|
44
|
-
s.add_dependency(%q<bones
|
39
|
+
s.add_dependency(%q<little-plugger>.freeze, ["~> 1.1"])
|
40
|
+
s.add_dependency(%q<multi_json>.freeze, ["~> 1.14"])
|
41
|
+
s.add_dependency(%q<test-unit>.freeze, ["~> 3.3"])
|
42
|
+
s.add_dependency(%q<bones-git>.freeze, ["~> 1.3"])
|
43
|
+
s.add_dependency(%q<bones>.freeze, [">= 3.8.4"])
|
45
44
|
end
|
46
45
|
end
|
data/script/console
ADDED
@@ -4,14 +4,15 @@ require File.expand_path('../setup', File.dirname(__FILE__))
|
|
4
4
|
module TestLogging
|
5
5
|
module TestAppenders
|
6
6
|
|
7
|
-
class
|
7
|
+
class TestAsyncFlushing < Test::Unit::TestCase
|
8
8
|
include LoggingTestCase
|
9
9
|
|
10
10
|
def setup
|
11
11
|
super
|
12
|
-
@appender = Logging.appenders.string_io
|
13
|
-
'test_appender',
|
14
|
-
|
12
|
+
@appender = Logging.appenders.string_io \
|
13
|
+
'test_appender',
|
14
|
+
:flush_period => 2
|
15
|
+
|
15
16
|
@appender.clear
|
16
17
|
@sio = @appender.sio
|
17
18
|
@levels = Logging::LEVELS
|
@@ -42,12 +43,12 @@ module TestAppenders
|
|
42
43
|
assert_equal 200, @appender.auto_flushing
|
43
44
|
end
|
44
45
|
|
45
|
-
def
|
46
|
-
flusher = @appender.instance_variable_get(:@
|
47
|
-
assert_instance_of Logging::Appenders::Buffering::
|
46
|
+
def test_async_flusher_running
|
47
|
+
flusher = @appender.instance_variable_get(:@async_flusher)
|
48
|
+
assert_instance_of Logging::Appenders::Buffering::AsyncFlusher, flusher
|
48
49
|
|
49
50
|
sleep 0.250 # give the flusher thread another moment to start
|
50
|
-
assert flusher.waiting?, 'the
|
51
|
+
assert flusher.waiting?, 'the async flusher should be waiting for a signal'
|
51
52
|
end
|
52
53
|
|
53
54
|
def test_append
|
@@ -129,13 +130,65 @@ module TestAppenders
|
|
129
130
|
assert_nil(readline)
|
130
131
|
end
|
131
132
|
|
132
|
-
|
133
|
-
|
134
|
-
|
133
|
+
def test_setting_flush_period_to_nil
|
134
|
+
flusher = @appender.instance_variable_get(:@async_flusher)
|
135
|
+
assert_instance_of Logging::Appenders::Buffering::AsyncFlusher, flusher
|
136
|
+
|
137
|
+
@appender.flush_period = nil
|
138
|
+
|
139
|
+
assert_nil @appender.instance_variable_get(:@async_flusher)
|
135
140
|
end
|
136
141
|
|
137
|
-
|
142
|
+
def test_setting_negative_flush_period
|
143
|
+
assert_raise(ArgumentError) { @appender.flush_period = -1 }
|
144
|
+
end
|
145
|
+
|
146
|
+
def test_async_writes
|
147
|
+
@appender.auto_flushing = 3
|
148
|
+
@appender.flush_period = nil
|
149
|
+
@appender.async = true
|
150
|
+
|
151
|
+
event = Logging::LogEvent.new('TestLogger', @levels['warn'],
|
152
|
+
[1, 2, 3, 4], false)
|
153
|
+
|
154
|
+
flusher = @appender.instance_variable_get(:@async_flusher)
|
155
|
+
assert_instance_of Logging::Appenders::Buffering::AsyncFlusher, flusher
|
138
156
|
|
139
|
-
|
140
|
-
|
157
|
+
@appender.append event
|
158
|
+
assert_nil(readline)
|
141
159
|
|
160
|
+
event.level = @levels['debug']
|
161
|
+
event.data = 'the big log message'
|
162
|
+
@appender.append event
|
163
|
+
sleep 0.250
|
164
|
+
assert_nil(readline)
|
165
|
+
|
166
|
+
event.level = @levels['info']
|
167
|
+
event.data = 'just FYI'
|
168
|
+
@appender.append event # might write here, might not
|
169
|
+
sleep 0.250 # so sleep a little to let the write occur
|
170
|
+
|
171
|
+
assert_equal " WARN TestLogger : <Array> #{[1, 2, 3, 4]}\n", readline
|
172
|
+
assert_equal "DEBUG TestLogger : the big log message\n", readline
|
173
|
+
assert_equal " INFO TestLogger : just FYI\n", readline
|
174
|
+
|
175
|
+
event.level = @levels['warn']
|
176
|
+
event.data = 'this is your last warning!'
|
177
|
+
@appender.append event
|
178
|
+
assert_nil(readline)
|
179
|
+
|
180
|
+
@appender.close_method = :close_write
|
181
|
+
@appender.close
|
182
|
+
|
183
|
+
assert_equal " WARN TestLogger : this is your last warning!\n", readline
|
184
|
+
|
185
|
+
assert_nil @appender.instance_variable_get(:@async_flusher)
|
186
|
+
end
|
187
|
+
|
188
|
+
private
|
189
|
+
def readline
|
190
|
+
@appender.readline
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
@@ -10,9 +10,12 @@ module TestAppenders
|
|
10
10
|
|
11
11
|
def setup
|
12
12
|
super
|
13
|
-
@appender = Logging.appenders.string_io
|
14
|
-
'test_appender',
|
15
|
-
|
13
|
+
@appender = Logging.appenders.string_io \
|
14
|
+
'test_appender',
|
15
|
+
:auto_flushing => 3,
|
16
|
+
:immediate_at => :error,
|
17
|
+
:encoding => 'UTF-8'
|
18
|
+
|
16
19
|
@appender.clear
|
17
20
|
@sio = @appender.sio
|
18
21
|
@levels = Logging::LEVELS
|
@@ -191,24 +194,22 @@ module TestAppenders
|
|
191
194
|
assert_nil(readline)
|
192
195
|
end
|
193
196
|
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
b = 'hello ümlaut'.force_encoding('BINARY')
|
197
|
+
def test_force_encoding
|
198
|
+
a = 'ümlaut'
|
199
|
+
b = 'hello ümlaut'.force_encoding('BINARY')
|
198
200
|
|
199
|
-
|
200
|
-
|
201
|
+
event_a = Logging::LogEvent.new('TestLogger', @levels['info'], a, false)
|
202
|
+
event_b = Logging::LogEvent.new('TestLogger', @levels['info'], b, false)
|
201
203
|
|
202
|
-
|
203
|
-
|
204
|
-
|
204
|
+
@appender.append event_a
|
205
|
+
@appender.append event_b
|
206
|
+
assert_nil(readline)
|
205
207
|
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
end
|
208
|
+
@appender.append event_a
|
209
|
+
assert_equal " INFO TestLogger : #{a}\n", readline
|
210
|
+
assert_equal " INFO TestLogger : #{b.force_encoding('UTF-8')}\n", readline
|
211
|
+
assert_equal " INFO TestLogger : #{a}\n", readline
|
212
|
+
assert_nil(readline)
|
212
213
|
end
|
213
214
|
|
214
215
|
private
|
@@ -4,6 +4,14 @@ require File.expand_path('../setup', File.dirname(__FILE__))
|
|
4
4
|
module TestLogging
|
5
5
|
module TestAppenders
|
6
6
|
|
7
|
+
class TestConsole < Test::Unit::TestCase
|
8
|
+
include LoggingTestCase
|
9
|
+
|
10
|
+
def test_initialize
|
11
|
+
assert_raise(RuntimeError) { Logging::Appenders::Console.new("test") }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
7
15
|
class TestStdout < Test::Unit::TestCase
|
8
16
|
include LoggingTestCase
|
9
17
|
|
@@ -12,11 +20,10 @@ module TestAppenders
|
|
12
20
|
|
13
21
|
appender = Logging.appenders.stdout
|
14
22
|
assert_equal 'stdout', appender.name
|
15
|
-
assert_same STDOUT, appender.instance_variable_get(:@io)
|
16
23
|
|
17
|
-
appender.
|
18
|
-
|
19
|
-
assert_equal
|
24
|
+
io = appender.instance_variable_get(:@io)
|
25
|
+
refute_same STDOUT, io
|
26
|
+
assert_equal STDOUT.fileno, io.fileno
|
20
27
|
|
21
28
|
appender = Logging.appenders.stdout('foo')
|
22
29
|
assert_equal 'foo', appender.name
|
@@ -30,7 +37,26 @@ module TestAppenders
|
|
30
37
|
assert_equal 3, appender.level
|
31
38
|
end
|
32
39
|
|
33
|
-
|
40
|
+
def test_reopen
|
41
|
+
Logging::Repository.instance
|
42
|
+
|
43
|
+
appender = Logging.appenders.stdout
|
44
|
+
io = appender.instance_variable_get(:@io)
|
45
|
+
|
46
|
+
appender.close
|
47
|
+
assert appender.closed?
|
48
|
+
assert io.closed?
|
49
|
+
refute STDOUT.closed?
|
50
|
+
|
51
|
+
appender.reopen
|
52
|
+
refute appender.closed?
|
53
|
+
|
54
|
+
new_io = appender.instance_variable_get(:@io)
|
55
|
+
refute_same io, new_io
|
56
|
+
refute new_io.closed?
|
57
|
+
assert io.closed?
|
58
|
+
end
|
59
|
+
end
|
34
60
|
|
35
61
|
class TestStderr < Test::Unit::TestCase
|
36
62
|
include LoggingTestCase
|
@@ -40,11 +66,10 @@ module TestAppenders
|
|
40
66
|
|
41
67
|
appender = Logging.appenders.stderr
|
42
68
|
assert_equal 'stderr', appender.name
|
43
|
-
assert_same STDERR, appender.instance_variable_get(:@io)
|
44
69
|
|
45
|
-
appender.
|
46
|
-
|
47
|
-
|
70
|
+
io = appender.instance_variable_get(:@io)
|
71
|
+
refute_same STDERR, io
|
72
|
+
assert_same STDERR.fileno, io.fileno
|
48
73
|
|
49
74
|
appender = Logging.appenders.stderr('foo')
|
50
75
|
assert_equal 'foo', appender.name
|
@@ -58,8 +83,26 @@ module TestAppenders
|
|
58
83
|
assert_equal 3, appender.level
|
59
84
|
end
|
60
85
|
|
61
|
-
|
86
|
+
def test_reopen
|
87
|
+
Logging::Repository.instance
|
62
88
|
|
63
|
-
|
64
|
-
|
89
|
+
appender = Logging.appenders.stderr
|
90
|
+
io = appender.instance_variable_get(:@io)
|
91
|
+
|
92
|
+
appender.close
|
93
|
+
assert appender.closed?
|
94
|
+
assert io.closed?
|
95
|
+
refute STDERR.closed?
|
96
|
+
|
97
|
+
appender.reopen
|
98
|
+
refute appender.closed?
|
99
|
+
|
100
|
+
new_io = appender.instance_variable_get(:@io)
|
101
|
+
refute_same io, new_io
|
102
|
+
refute new_io.closed?
|
103
|
+
assert io.closed?
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
65
108
|
|
data/test/appenders/test_file.rb
CHANGED
@@ -14,34 +14,40 @@ module TestAppenders
|
|
14
14
|
super
|
15
15
|
Logging.init
|
16
16
|
|
17
|
-
FileUtils.mkdir [File.join(
|
18
|
-
FileUtils.chmod 0555, File.join(
|
19
|
-
FileUtils.touch File.join(
|
20
|
-
FileUtils.chmod 0444, File.join(
|
17
|
+
FileUtils.mkdir [File.join(@tmpdir, 'dir'), File.join(@tmpdir, 'uw_dir')]
|
18
|
+
FileUtils.chmod 0555, File.join(@tmpdir, 'uw_dir')
|
19
|
+
FileUtils.touch File.join(@tmpdir, 'uw_file')
|
20
|
+
FileUtils.chmod 0444, File.join(@tmpdir, 'uw_file')
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_factory_method_validates_input
|
24
|
+
assert_raise(ArgumentError) do
|
25
|
+
Logging.appenders.file
|
26
|
+
end
|
21
27
|
end
|
22
28
|
|
23
29
|
def test_class_assert_valid_logfile
|
24
|
-
log = File.join(
|
30
|
+
log = File.join(@tmpdir, 'uw_dir', 'file.log')
|
25
31
|
assert_raise(ArgumentError) do
|
26
|
-
Logging.appenders.file.assert_valid_logfile(log)
|
32
|
+
Logging.appenders.file(log).class.assert_valid_logfile(log)
|
27
33
|
end
|
28
34
|
|
29
|
-
log = File.join(
|
35
|
+
log = File.join(@tmpdir, 'dir')
|
30
36
|
assert_raise(ArgumentError) do
|
31
|
-
Logging.appenders.file.assert_valid_logfile(log)
|
37
|
+
Logging.appenders.file(log).class.assert_valid_logfile(log)
|
32
38
|
end
|
33
39
|
|
34
|
-
log = File.join(
|
40
|
+
log = File.join(@tmpdir, 'uw_file')
|
35
41
|
assert_raise(ArgumentError) do
|
36
|
-
Logging.appenders.file.assert_valid_logfile(log)
|
42
|
+
Logging.appenders.file(log).class.assert_valid_logfile(log)
|
37
43
|
end
|
38
44
|
|
39
|
-
log = File.join(
|
40
|
-
assert Logging.appenders.file.assert_valid_logfile(log)
|
45
|
+
log = File.join(@tmpdir, 'file.log')
|
46
|
+
assert Logging.appenders.file(log).class.assert_valid_logfile(log)
|
41
47
|
end
|
42
48
|
|
43
49
|
def test_initialize
|
44
|
-
log = File.join(
|
50
|
+
log = File.join(@tmpdir, 'file.log')
|
45
51
|
appender = Logging.appenders.file(NAME, :filename => log)
|
46
52
|
assert_equal 'logfile', appender.name
|
47
53
|
assert_equal ::File.expand_path(log), appender.filename
|
@@ -81,7 +87,7 @@ module TestAppenders
|
|
81
87
|
end
|
82
88
|
|
83
89
|
def test_changing_directories
|
84
|
-
log = File.join(
|
90
|
+
log = File.join(@tmpdir, 'file.log')
|
85
91
|
appender = Logging.appenders.file(NAME, :filename => log)
|
86
92
|
|
87
93
|
assert_equal 'logfile', appender.name
|
@@ -89,30 +95,45 @@ module TestAppenders
|
|
89
95
|
|
90
96
|
begin
|
91
97
|
pwd = Dir.pwd
|
92
|
-
Dir.chdir
|
98
|
+
Dir.chdir @tmpdir
|
93
99
|
assert_nothing_raised { appender.reopen }
|
94
100
|
ensure
|
95
101
|
Dir.chdir pwd
|
96
102
|
end
|
97
103
|
end
|
98
104
|
|
99
|
-
|
105
|
+
def test_encoding
|
106
|
+
log = File.join(@tmpdir, 'file-encoding.log')
|
107
|
+
appender = Logging.appenders.file(NAME, :filename => log, :encoding => 'ASCII')
|
108
|
+
|
109
|
+
appender << "A normal line of text\n"
|
110
|
+
appender << "ümlaut\n"
|
111
|
+
appender.close
|
100
112
|
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
appender = Logging.appenders.file(NAME, :filename => log, :encoding => 'ASCII')
|
113
|
+
lines = File.readlines(log, :encoding => 'UTF-8')
|
114
|
+
assert_equal "A normal line of text\n", lines[0]
|
115
|
+
assert_equal "ümlaut\n", lines[1]
|
105
116
|
|
106
|
-
|
107
|
-
|
108
|
-
appender.close
|
117
|
+
cleanup
|
118
|
+
end
|
109
119
|
|
110
|
-
|
111
|
-
|
112
|
-
|
120
|
+
def test_reopening_should_not_truncate_the_file
|
121
|
+
log = File.join(@tmpdir, 'truncate.log')
|
122
|
+
appender = Logging.appenders.file(NAME, filename: log, truncate: true)
|
113
123
|
|
114
|
-
|
124
|
+
appender << "This will be the first line\n"
|
125
|
+
appender << "This will be the second line\n"
|
126
|
+
appender << "This will be the third line\n"
|
127
|
+
appender.reopen
|
128
|
+
|
129
|
+
File.open(log, 'r') do |file|
|
130
|
+
assert_equal "This will be the first line\n", file.readline
|
131
|
+
assert_equal "This will be the second line\n", file.readline
|
132
|
+
assert_equal "This will be the third line\n", file.readline
|
133
|
+
assert_raise(EOFError) {file.readline}
|
115
134
|
end
|
135
|
+
|
136
|
+
cleanup
|
116
137
|
end
|
117
138
|
|
118
139
|
private
|
@@ -122,7 +143,6 @@ module TestAppenders
|
|
122
143
|
Logging.appenders[NAME] = nil
|
123
144
|
end
|
124
145
|
end
|
125
|
-
|
126
146
|
end # TestFile
|
127
147
|
|
128
148
|
end # TestAppenders
|