summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJeremy Evans <code@jeremyevans.net>2019-08-16 09:12:06 -0700
committergit <svn-admin@ruby-lang.org>2024-07-11 15:25:17 +0000
commitc698180e68a0f417415cd087efc303931af3bb3e (patch)
tree03306432e92de563d0cb8e3db1a15e6636e7c35e /lib
parenta0469a4788d1153cbc25860d82140425763c2571 (diff)
[ruby/logger] Add reraise_write_errors keyword argument to Logger and LogDevice
This allows the user to specify exception classes to treat as regular exceptions instead of being swallowed. Among other things, it is useful for having Logger work with Timeout. Fixes Ruby Bug 9115. https://github.com/ruby/logger/commit/436a7d680f
Diffstat (limited to 'lib')
-rw-r--r--lib/logger.rb9
-rw-r--r--lib/logger/log_device.rb9
2 files changed, 15 insertions, 3 deletions
diff --git a/lib/logger.rb b/lib/logger.rb
index 4099955ef2..4a9c81b72b 100644
--- a/lib/logger.rb
+++ b/lib/logger.rb
@@ -574,10 +574,14 @@ class Logger
# - +shift_period_suffix+: sets the format for the filename suffix
# for periodic log file rotation; default is <tt>'%Y%m%d'</tt>.
# See {Periodic Rotation}[rdoc-ref:Logger@Periodic+Rotation].
+ # - +reraise_write_errors+: An array of exception classes, which will
+ # be reraised if there is an error when writing to the log device.
+ # The default is to swallow all exceptions raised.
#
def initialize(logdev, shift_age = 0, shift_size = 1048576, level: DEBUG,
progname: nil, formatter: nil, datetime_format: nil,
- binmode: false, shift_period_suffix: '%Y%m%d')
+ binmode: false, shift_period_suffix: '%Y%m%d',
+ reraise_write_errors: [])
self.level = level
self.progname = progname
@default_formatter = Formatter.new
@@ -589,7 +593,8 @@ class Logger
@logdev = LogDevice.new(logdev, shift_age: shift_age,
shift_size: shift_size,
shift_period_suffix: shift_period_suffix,
- binmode: binmode)
+ binmode: binmode,
+ reraise_write_errors: reraise_write_errors)
end
end
diff --git a/lib/logger/log_device.rb b/lib/logger/log_device.rb
index 84277a2656..4876adf0b7 100644
--- a/lib/logger/log_device.rb
+++ b/lib/logger/log_device.rb
@@ -11,9 +11,10 @@ class Logger
attr_reader :filename
include MonitorMixin
- def initialize(log = nil, shift_age: nil, shift_size: nil, shift_period_suffix: nil, binmode: false)
+ def initialize(log = nil, shift_age: nil, shift_size: nil, shift_period_suffix: nil, binmode: false, reraise_write_errors: [])
@dev = @filename = @shift_age = @shift_size = @shift_period_suffix = nil
@binmode = binmode
+ @reraise_write_errors = reraise_write_errors
mon_initialize
set_dev(log)
if @filename
@@ -34,16 +35,22 @@ class Logger
if @shift_age and @dev.respond_to?(:stat)
begin
check_shift_log
+ rescue *@reraise_write_errors
+ raise
rescue
warn("log shifting failed. #{$!}")
end
end
begin
@dev.write(message)
+ rescue *@reraise_write_errors
+ raise
rescue
warn("log writing failed. #{$!}")
end
end
+ rescue *@reraise_write_errors
+ raise
rescue Exception => ignored
warn("log writing failed. #{ignored}")
end