diff --git a/lib/logger.rb b/lib/logger.rb
index 25e2c27..4838107 100644
--- a/lib/logger.rb
+++ b/lib/logger.rb
@@ -545,6 +545,7 @@ def fatal!; self.level = FATAL; end
# new entries are appended.
# - An IO stream (typically $stdout, $stderr. or
# an open file): entries are to be written to the given stream.
+ # - An instance of Logger::LogDevice, such as the #logdev of another Logger.
# - +nil+ or +File::NULL+: no entries are to be written.
#
# Argument +shift_age+ must be one of:
@@ -603,7 +604,13 @@ def initialize(logdev, shift_age = 0, shift_size = 1048576, level: DEBUG,
self.formatter = formatter
@logdev = nil
@level_override = {}
- if logdev && logdev != File::NULL
+ return unless logdev
+ case logdev
+ when File::NULL
+ # null logger
+ when LogDevice
+ @logdev = logdev
+ else
@logdev = LogDevice.new(logdev, shift_age: shift_age,
shift_size: shift_size,
shift_period_suffix: shift_period_suffix,
@@ -612,6 +619,12 @@ def initialize(logdev, shift_age = 0, shift_size = 1048576, level: DEBUG,
end
end
+ # The underlying log device.
+ #
+ # This is the first argument passed to the constructor, wrapped in a
+ # Logger::LogDevice, along with the binmode flag and rotation options.
+ attr_reader :logdev
+
# Sets the logger's output stream:
#
# - If +logdev+ is +nil+, reopens the current output stream.
diff --git a/test/logger/test_logger.rb b/test/logger/test_logger.rb
index ea27fba..75a0f74 100644
--- a/test/logger/test_logger.rb
+++ b/test/logger/test_logger.rb
@@ -177,6 +177,16 @@ def test_initialize
assert_nil(logger.datetime_format)
end
+ def test_logdev
+ logger = Logger.new(STDERR)
+ assert_instance_of(Logger::LogDevice, logger.logdev)
+
+ logdev = Logger::LogDevice.new(STDERR)
+ logger = Logger.new(logdev)
+ assert_instance_of(Logger::LogDevice, logger.logdev)
+ assert_equal(STDERR, logger.logdev.dev)
+ end
+
def test_initialize_with_level
# default
logger = Logger.new(STDERR)