logging 2.2.2 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +5 -3
- data/History.txt +15 -0
- data/Rakefile +2 -2
- data/examples/appenders.rb +1 -1
- data/examples/mdc.rb +2 -2
- data/lib/logging.rb +21 -6
- data/lib/logging/appender.rb +5 -25
- data/lib/logging/appenders/buffering.rb +3 -3
- data/lib/logging/appenders/console.rb +37 -7
- data/lib/logging/appenders/file.rb +42 -21
- data/lib/logging/appenders/io.rb +13 -10
- data/lib/logging/appenders/rolling_file.rb +48 -24
- data/lib/logging/appenders/string_io.rb +1 -1
- data/lib/logging/appenders/syslog.rb +2 -3
- data/lib/logging/layouts/parseable.rb +1 -1
- data/lib/logging/layouts/pattern.rb +1 -1
- data/lib/logging/log_event.rb +5 -5
- data/lib/logging/logger.rb +15 -13
- data/lib/logging/proxy.rb +1 -1
- data/lib/logging/version.rb +1 -1
- data/logging.gemspec +12 -13
- data/test/appenders/test_buffered_io.rb +16 -18
- data/test/appenders/test_console.rb +47 -12
- data/test/appenders/test_file.rb +38 -23
- data/test/appenders/test_rolling_file.rb +12 -12
- data/test/layouts/test_json.rb +1 -1
- data/test/layouts/test_nested_exceptions.rb +6 -6
- data/test/layouts/test_pattern.rb +1 -1
- data/test/layouts/test_yaml.rb +1 -1
- data/test/setup.rb +9 -5
- data/test/test_log_event.rb +2 -2
- data/test/test_logging.rb +29 -4
- metadata +10 -11
@@ -84,24 +84,32 @@ module Logging::Appenders
|
|
84
84
|
# 'date'.
|
85
85
|
#
|
86
86
|
def initialize( name, opts = {} )
|
87
|
-
@roller = Roller.new
|
87
|
+
@roller = Roller.new(
|
88
|
+
opts.fetch(:filename, name),
|
89
|
+
age: opts.fetch(:age, nil),
|
90
|
+
size: opts.fetch(:size, nil),
|
91
|
+
roll_by: opts.fetch(:roll_by, nil),
|
92
|
+
keep: opts.fetch(:keep, nil)
|
93
|
+
)
|
88
94
|
|
89
95
|
# grab our options
|
90
96
|
@size = opts.fetch(:size, nil)
|
91
97
|
@size = Integer(@size) unless @size.nil?
|
92
98
|
|
93
|
-
@age_fn = filename + '.age'
|
99
|
+
@age_fn = self.filename + '.age'
|
94
100
|
@age_fn_mtime = nil
|
95
101
|
@age = opts.fetch(:age, nil)
|
96
102
|
|
97
103
|
# create our `sufficiently_aged?` method
|
98
104
|
build_singleton_methods
|
99
|
-
FileUtils.touch(@age_fn) if @age &&
|
105
|
+
FileUtils.touch(@age_fn) if @age && !::File.file?(@age_fn)
|
100
106
|
|
101
107
|
# we are opening the file in read/write mode so that a shared lock can
|
102
108
|
# be used on the file descriptor => http://pubs.opengroup.org/onlinepubs/009695399/functions/fcntl.html
|
103
|
-
|
104
|
-
|
109
|
+
self.encoding = opts.fetch(:encoding, self.encoding)
|
110
|
+
|
111
|
+
io = open_file
|
112
|
+
super(name, io, opts)
|
105
113
|
|
106
114
|
# if the truncate flag was set to true, then roll
|
107
115
|
roll_now = opts.fetch(:truncate, false)
|
@@ -121,11 +129,11 @@ module Logging::Appenders
|
|
121
129
|
# is currently open then it will be closed and immediately opened.
|
122
130
|
def reopen
|
123
131
|
@mutex.synchronize {
|
124
|
-
if defined?
|
132
|
+
if defined? @io && @io
|
125
133
|
flush
|
126
134
|
@io.close rescue nil
|
127
135
|
end
|
128
|
-
@io =
|
136
|
+
@io = open_file
|
129
137
|
}
|
130
138
|
super
|
131
139
|
self
|
@@ -134,6 +142,20 @@ module Logging::Appenders
|
|
134
142
|
|
135
143
|
private
|
136
144
|
|
145
|
+
def open_file
|
146
|
+
mode = ::File::RDWR | ::File::APPEND
|
147
|
+
::File.open(filename, mode: mode, external_encoding: encoding)
|
148
|
+
rescue Errno::ENOENT
|
149
|
+
create_file
|
150
|
+
end
|
151
|
+
|
152
|
+
def create_file
|
153
|
+
mode = ::File::RDWR | ::File::APPEND | ::File::CREAT | ::File::EXCL
|
154
|
+
::File.open(filename, mode: mode, external_encoding: encoding)
|
155
|
+
rescue Errno::EEXIST
|
156
|
+
open_file
|
157
|
+
end
|
158
|
+
|
137
159
|
# Returns the file name to use as the temporary copy location. We are
|
138
160
|
# using copy-and-truncate semantics for rolling files so that the IO
|
139
161
|
# file descriptor remains valid during rolling.
|
@@ -157,14 +179,18 @@ module Logging::Appenders
|
|
157
179
|
return self if @io.nil?
|
158
180
|
|
159
181
|
str = str.force_encoding(encoding) if encoding && str.encoding != encoding
|
160
|
-
@
|
182
|
+
@mutex.synchronize {
|
183
|
+
@io.flock_sh { @io.write str }
|
184
|
+
}
|
161
185
|
|
162
186
|
if roll_required?
|
163
|
-
@
|
164
|
-
@
|
165
|
-
|
187
|
+
@mutex.synchronize {
|
188
|
+
@io.flock? {
|
189
|
+
@age_fn_mtime = nil
|
190
|
+
copy_truncate if roll_required?
|
191
|
+
}
|
192
|
+
@roller.roll_files
|
166
193
|
}
|
167
|
-
@roller.roll_files
|
168
194
|
end
|
169
195
|
self
|
170
196
|
rescue StandardError => err
|
@@ -193,7 +219,7 @@ module Logging::Appenders
|
|
193
219
|
def copy_truncate
|
194
220
|
return unless ::File.exist?(filename)
|
195
221
|
FileUtils.concat filename, copy_file
|
196
|
-
@io.truncate
|
222
|
+
@io.truncate(0)
|
197
223
|
|
198
224
|
# touch the age file if needed
|
199
225
|
if @age
|
@@ -255,22 +281,22 @@ module Logging::Appenders
|
|
255
281
|
# Create a new roller. See the RollingFile#initialize documentation for
|
256
282
|
# the list of options.
|
257
283
|
#
|
258
|
-
#
|
259
|
-
#
|
284
|
+
# filename - the name of the file to roll
|
285
|
+
# age - the age of the file at which it should be rolled
|
286
|
+
# size - the size of the file in bytes at which it should be rolled
|
287
|
+
# roll_by - roll either by 'number' or 'date'
|
288
|
+
# keep - the number of log files to keep when rolling
|
260
289
|
#
|
261
|
-
def initialize(
|
290
|
+
def initialize( filename, age: nil, size: nil, roll_by: nil, keep: nil )
|
262
291
|
# raise an error if a filename was not given
|
263
|
-
@fn =
|
292
|
+
@fn = filename
|
264
293
|
raise ArgumentError, 'no filename was given' if @fn.nil?
|
265
294
|
|
266
295
|
if (m = RGXP.match @fn)
|
267
296
|
@roll_by = ("#{m[2]}%d" == m[1]) ? :number : :date
|
268
297
|
else
|
269
|
-
age = opts.fetch(:age, nil)
|
270
|
-
size = opts.fetch(:size, nil)
|
271
|
-
|
272
298
|
@roll_by =
|
273
|
-
case
|
299
|
+
case roll_by
|
274
300
|
when 'number'; :number
|
275
301
|
when 'date'; :date
|
276
302
|
else
|
@@ -293,8 +319,7 @@ module Logging::Appenders
|
|
293
319
|
::Logging::Appenders::File.assert_valid_logfile(filename)
|
294
320
|
|
295
321
|
@roll = false
|
296
|
-
@keep =
|
297
|
-
@keep = Integer(keep) unless keep.nil?
|
322
|
+
@keep = keep.nil? ? nil : Integer(keep)
|
298
323
|
end
|
299
324
|
|
300
325
|
attr_reader :keep, :roll_by
|
@@ -347,7 +372,6 @@ module Logging::Appenders
|
|
347
372
|
files.delete copy_file
|
348
373
|
|
349
374
|
self.send "roll_by_#{roll_by}", files
|
350
|
-
|
351
375
|
nil
|
352
376
|
ensure
|
353
377
|
self.roll = false
|
@@ -188,7 +188,7 @@ module Logging::Appenders
|
|
188
188
|
end
|
189
189
|
return if message.empty?
|
190
190
|
|
191
|
-
@syslog.log(pri, '%s', message)
|
191
|
+
@mutex.synchronize { @syslog.log(pri, '%s', message) }
|
192
192
|
self
|
193
193
|
end
|
194
194
|
|
@@ -205,11 +205,10 @@ module Logging::Appenders
|
|
205
205
|
level = level.to_s.upcase
|
206
206
|
self.class.const_get level
|
207
207
|
else
|
208
|
-
raise ArgumentError, "
|
208
|
+
raise ArgumentError, "unknown level '#{level}'"
|
209
209
|
end
|
210
210
|
end
|
211
211
|
|
212
212
|
end # Syslog
|
213
213
|
end # Logging::Appenders
|
214
214
|
end # HAVE_SYSLOG
|
215
|
-
|
@@ -103,7 +103,7 @@ module Logging::Layouts
|
|
103
103
|
'message' => 'format_obj(event.data)'.freeze,
|
104
104
|
'file' => 'event.file'.freeze,
|
105
105
|
'line' => 'event.line'.freeze,
|
106
|
-
'method' => 'event.
|
106
|
+
'method' => 'event.method_name'.freeze,
|
107
107
|
'hostname' => "'#{Socket.gethostname}'".freeze,
|
108
108
|
'pid' => 'Process.pid'.freeze,
|
109
109
|
'millis' => 'Integer((event.time-@created_at)*1000)'.freeze,
|
@@ -307,7 +307,7 @@ module Logging::Layouts
|
|
307
307
|
'l' => '::Logging::LNAMES[event.level]'.freeze,
|
308
308
|
'L' => 'event.line'.freeze,
|
309
309
|
'm' => 'format_obj(event.data)'.freeze,
|
310
|
-
'M' => 'event.
|
310
|
+
'M' => 'event.method_name'.freeze,
|
311
311
|
'h' => "'#{Socket.gethostname}'".freeze,
|
312
312
|
'p' => 'Process.pid'.freeze,
|
313
313
|
'r' => 'Integer((event.time-@created_at)*1000).to_s'.freeze,
|
data/lib/logging/log_event.rb
CHANGED
@@ -15,7 +15,7 @@ module Logging
|
|
15
15
|
CALLER_INDEX = ((defined? JRUBY_VERSION and JRUBY_VERSION > '1.6') or (defined? RUBY_ENGINE and RUBY_ENGINE[%r/^rbx/i])) ? 1 : 2
|
16
16
|
# :startdoc:
|
17
17
|
|
18
|
-
attr_accessor :logger, :level, :data, :time, :file, :line, :
|
18
|
+
attr_accessor :logger, :level, :data, :time, :file, :line, :method_name
|
19
19
|
|
20
20
|
# call-seq:
|
21
21
|
# LogEvent.new( logger, level, [data], caller_tracing )
|
@@ -36,15 +36,15 @@ module Logging
|
|
36
36
|
return if stack.nil?
|
37
37
|
|
38
38
|
match = CALLER_RGXP.match(stack)
|
39
|
-
self.file
|
40
|
-
self.line
|
41
|
-
self.
|
39
|
+
self.file = match[1]
|
40
|
+
self.line = Integer(match[2])
|
41
|
+
self.method_name = match[3] unless match[3].nil?
|
42
42
|
|
43
43
|
if (bp = ::Logging.basepath) && !bp.empty? && file.index(bp) == 0
|
44
44
|
self.file = file.slice(bp.length + 1, file.length - bp.length)
|
45
45
|
end
|
46
46
|
else
|
47
|
-
self.file = self.line = self.
|
47
|
+
self.file = self.line = self.method_name = ''
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
data/lib/logging/logger.rb
CHANGED
@@ -24,8 +24,6 @@ module Logging
|
|
24
24
|
#
|
25
25
|
class Logger
|
26
26
|
|
27
|
-
@mutex = Mutex.new # :nodoc:
|
28
|
-
|
29
27
|
# Returns the root logger.
|
30
28
|
def self.root
|
31
29
|
::Logging::Repository.instance[:root]
|
@@ -48,7 +46,10 @@ module Logging
|
|
48
46
|
logger = repo[name]
|
49
47
|
return logger unless logger.nil?
|
50
48
|
|
51
|
-
|
49
|
+
# Share the same mutex that's used by 'define_log_methods' because
|
50
|
+
# it iterates over the hash of loggers, and adding a new key to a hash
|
51
|
+
# while iterating over it produces an error.
|
52
|
+
::Logging::Logger.mutex.synchronize do
|
52
53
|
logger = repo[name]
|
53
54
|
return logger unless logger.nil? # thread-safe double checking
|
54
55
|
|
@@ -118,6 +119,14 @@ module Logging
|
|
118
119
|
code.join("\n")
|
119
120
|
end
|
120
121
|
|
122
|
+
@mutex = ReentrantMutex.new
|
123
|
+
|
124
|
+
# Returns a global ReentrantMutex for use when creating Logger instances
|
125
|
+
# and/or updating log levels.
|
126
|
+
def self.mutex
|
127
|
+
@mutex
|
128
|
+
end
|
129
|
+
|
121
130
|
attr_reader :name, :parent, :additive, :caller_tracing
|
122
131
|
|
123
132
|
# call-seq:
|
@@ -411,7 +420,7 @@ module Logging
|
|
411
420
|
def define_log_methods( force = false, code = nil )
|
412
421
|
return if has_own_level? and !force
|
413
422
|
|
414
|
-
::Logging::Logger.
|
423
|
+
::Logging::Logger.mutex.synchronize do
|
415
424
|
::Logging::Logger.define_log_methods(self)
|
416
425
|
::Logging::Repository.instance.children(name).each do |child|
|
417
426
|
child.define_log_methods
|
@@ -423,12 +432,6 @@ module Logging
|
|
423
432
|
# :stopdoc:
|
424
433
|
public
|
425
434
|
|
426
|
-
@reentrant_mutex = ReentrantMutex.new
|
427
|
-
|
428
|
-
def self._reentrant_mutex
|
429
|
-
@reentrant_mutex
|
430
|
-
end
|
431
|
-
|
432
435
|
# call-seq:
|
433
436
|
# _meta_eval( code )
|
434
437
|
#
|
@@ -511,6 +514,5 @@ module Logging
|
|
511
514
|
end
|
512
515
|
# :startdoc:
|
513
516
|
|
514
|
-
end
|
515
|
-
end
|
516
|
-
|
517
|
+
end
|
518
|
+
end
|
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/version.rb
CHANGED
data/logging.gemspec
CHANGED
@@ -1,45 +1,44 @@
|
|
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
5
|
s.name = "logging".freeze
|
6
|
-
s.version = "2.
|
6
|
+
s.version = "2.3.0"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib".freeze]
|
10
10
|
s.authors = ["Tim Pease".freeze]
|
11
|
-
s.date = "
|
11
|
+
s.date = "2020-07-04"
|
12
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
13
|
s.email = "tim.pease@gmail.com".freeze
|
14
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_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]
|
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
16
|
s.homepage = "http://rubygems.org/gems/logging".freeze
|
17
17
|
s.rdoc_options = ["--main".freeze, "README.md".freeze]
|
18
|
-
s.
|
19
|
-
s.rubygems_version = "2.5.2".freeze
|
18
|
+
s.rubygems_version = "3.0.1".freeze
|
20
19
|
s.summary = "A flexible and extendable logging library for Ruby".freeze
|
21
|
-
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_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]
|
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
26
|
s.add_runtime_dependency(%q<little-plugger>.freeze, ["~> 1.1"])
|
28
|
-
s.add_runtime_dependency(%q<multi_json>.freeze, ["~> 1.
|
29
|
-
s.add_development_dependency(%q<test-unit>.freeze, ["~> 3.
|
27
|
+
s.add_runtime_dependency(%q<multi_json>.freeze, ["~> 1.14"])
|
28
|
+
s.add_development_dependency(%q<test-unit>.freeze, ["~> 3.3"])
|
30
29
|
s.add_development_dependency(%q<bones-git>.freeze, ["~> 1.3"])
|
31
30
|
s.add_development_dependency(%q<bones>.freeze, [">= 3.8.4"])
|
32
31
|
else
|
33
32
|
s.add_dependency(%q<little-plugger>.freeze, ["~> 1.1"])
|
34
|
-
s.add_dependency(%q<multi_json>.freeze, ["~> 1.
|
35
|
-
s.add_dependency(%q<test-unit>.freeze, ["~> 3.
|
33
|
+
s.add_dependency(%q<multi_json>.freeze, ["~> 1.14"])
|
34
|
+
s.add_dependency(%q<test-unit>.freeze, ["~> 3.3"])
|
36
35
|
s.add_dependency(%q<bones-git>.freeze, ["~> 1.3"])
|
37
36
|
s.add_dependency(%q<bones>.freeze, [">= 3.8.4"])
|
38
37
|
end
|
39
38
|
else
|
40
39
|
s.add_dependency(%q<little-plugger>.freeze, ["~> 1.1"])
|
41
|
-
s.add_dependency(%q<multi_json>.freeze, ["~> 1.
|
42
|
-
s.add_dependency(%q<test-unit>.freeze, ["~> 3.
|
40
|
+
s.add_dependency(%q<multi_json>.freeze, ["~> 1.14"])
|
41
|
+
s.add_dependency(%q<test-unit>.freeze, ["~> 3.3"])
|
43
42
|
s.add_dependency(%q<bones-git>.freeze, ["~> 1.3"])
|
44
43
|
s.add_dependency(%q<bones>.freeze, [">= 3.8.4"])
|
45
44
|
end
|
@@ -194,24 +194,22 @@ module TestAppenders
|
|
194
194
|
assert_nil(readline)
|
195
195
|
end
|
196
196
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
assert_nil(readline)
|
214
|
-
end
|
197
|
+
def test_force_encoding
|
198
|
+
a = 'ümlaut'
|
199
|
+
b = 'hello ümlaut'.force_encoding('BINARY')
|
200
|
+
|
201
|
+
event_a = Logging::LogEvent.new('TestLogger', @levels['info'], a, false)
|
202
|
+
event_b = Logging::LogEvent.new('TestLogger', @levels['info'], b, false)
|
203
|
+
|
204
|
+
@appender.append event_a
|
205
|
+
@appender.append event_b
|
206
|
+
assert_nil(readline)
|
207
|
+
|
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)
|
215
213
|
end
|
216
214
|
|
217
215
|
private
|
@@ -20,11 +20,10 @@ module TestAppenders
|
|
20
20
|
|
21
21
|
appender = Logging.appenders.stdout
|
22
22
|
assert_equal 'stdout', appender.name
|
23
|
-
assert_same STDOUT, appender.instance_variable_get(:@io)
|
24
23
|
|
25
|
-
appender.
|
26
|
-
|
27
|
-
assert_equal
|
24
|
+
io = appender.instance_variable_get(:@io)
|
25
|
+
refute_same STDOUT, io
|
26
|
+
assert_equal STDOUT.fileno, io.fileno
|
28
27
|
|
29
28
|
appender = Logging.appenders.stdout('foo')
|
30
29
|
assert_equal 'foo', appender.name
|
@@ -38,7 +37,26 @@ module TestAppenders
|
|
38
37
|
assert_equal 3, appender.level
|
39
38
|
end
|
40
39
|
|
41
|
-
|
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
|
42
60
|
|
43
61
|
class TestStderr < Test::Unit::TestCase
|
44
62
|
include LoggingTestCase
|
@@ -48,11 +66,10 @@ module TestAppenders
|
|
48
66
|
|
49
67
|
appender = Logging.appenders.stderr
|
50
68
|
assert_equal 'stderr', appender.name
|
51
|
-
assert_same STDERR, appender.instance_variable_get(:@io)
|
52
69
|
|
53
|
-
appender.
|
54
|
-
|
55
|
-
|
70
|
+
io = appender.instance_variable_get(:@io)
|
71
|
+
refute_same STDERR, io
|
72
|
+
assert_same STDERR.fileno, io.fileno
|
56
73
|
|
57
74
|
appender = Logging.appenders.stderr('foo')
|
58
75
|
assert_equal 'foo', appender.name
|
@@ -66,8 +83,26 @@ module TestAppenders
|
|
66
83
|
assert_equal 3, appender.level
|
67
84
|
end
|
68
85
|
|
69
|
-
|
86
|
+
def test_reopen
|
87
|
+
Logging::Repository.instance
|
70
88
|
|
71
|
-
|
72
|
-
|
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
|
73
108
|
|