diff options
author | Mike Perham <[email protected]> | 2023-02-09 17:08:33 -0800 |
---|---|---|
committer | git <[email protected]> | 2023-02-10 01:08:49 +0000 |
commit | 194520f80e1cdb71faa055d731450855a1ddb8d1 (patch) | |
tree | e1b2a55db6d588213f5e26f2ed7cfed1dc597553 /lib/logger.rb | |
parent | b61edc5f5daf8fb664c9bcd7e51850176055d749 (diff) |
[ruby/logger] Add Logger#with_level{...} for block-scoped log level.
(https://github.com/ruby/logger/pull/85)
* Update lib/logger/severity.rb
https://github.com/ruby/logger/commit/7aabb0b4aa
Diffstat (limited to 'lib/logger.rb')
-rw-r--r-- | lib/logger.rb | 39 |
1 files changed, 21 insertions, 18 deletions
diff --git a/lib/logger.rb b/lib/logger.rb index 7e4dacc911..acc65ac8bb 100644 --- a/lib/logger.rb +++ b/lib/logger.rb @@ -10,6 +10,7 @@ # # A simple system for logging messages. See Logger for more documentation. +require 'fiber' require 'monitor' require 'rbconfig' @@ -380,7 +381,9 @@ class Logger include Severity # Logging severity threshold (e.g. <tt>Logger::INFO</tt>). - attr_reader :level + def level + @level_override[Fiber.current] || @level + end # Sets the log level; returns +severity+. # See {Log Level}[rdoc-ref:Logger@Log+Level]. @@ -395,24 +398,23 @@ class Logger # Logger#sev_threshold= is an alias for Logger#level=. # def level=(severity) - if severity.is_a?(Integer) - @level = severity - else - case severity.to_s.downcase - when 'debug' - @level = DEBUG - when 'info' - @level = INFO - when 'warn' - @level = WARN - when 'error' - @level = ERROR - when 'fatal' - @level = FATAL - when 'unknown' - @level = UNKNOWN + @level = Severity.coerce(severity) + end + + # Adjust the log level during the block execution for the current Fiber only + # + # logger.with_level(:debug) do + # logger.debug { "Hello" } + # end + def with_level(severity) + prev, @level_override[Fiber.current] = level, Severity.coerce(severity) + begin + yield + ensure + if prev + @level_override[Fiber.current] = prev else - raise ArgumentError, "invalid log level: #{severity}" + @level_override.delete(Fiber.current) end end end @@ -583,6 +585,7 @@ class Logger self.datetime_format = datetime_format self.formatter = formatter @logdev = nil + @level_override = {} if logdev && logdev != File::NULL @logdev = LogDevice.new(logdev, shift_age: shift_age, shift_size: shift_size, |