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)