mirror of
https://github.com/ruby/ruby.git
synced 2026-01-27 04:24:23 +00:00
[ruby/logger] Guarantee level_override exists
Some Ruby apps subclass Logger without running the superclass constructor, which means that `@level_override` isn't initialized properly. This can be fixed in some cases, but the gem should maintain backwards compatibility. https://github.com/ruby/logger/commit/3246f38328
This commit is contained in:
parent
1d68a735a2
commit
014708ad5a
@ -381,7 +381,7 @@ class Logger
|
||||
|
||||
# Logging severity threshold (e.g. <tt>Logger::INFO</tt>).
|
||||
def level
|
||||
@level_override[Fiber.current] || @level
|
||||
level_override[Fiber.current] || @level
|
||||
end
|
||||
|
||||
# Sets the log level; returns +severity+.
|
||||
@ -406,14 +406,14 @@ class Logger
|
||||
# logger.debug { "Hello" }
|
||||
# end
|
||||
def with_level(severity)
|
||||
prev, @level_override[Fiber.current] = level, Severity.coerce(severity)
|
||||
prev, level_override[Fiber.current] = level, Severity.coerce(severity)
|
||||
begin
|
||||
yield
|
||||
ensure
|
||||
if prev
|
||||
@level_override[Fiber.current] = prev
|
||||
level_override[Fiber.current] = prev
|
||||
else
|
||||
@level_override.delete(Fiber.current)
|
||||
level_override.delete(Fiber.current)
|
||||
end
|
||||
end
|
||||
end
|
||||
@ -746,6 +746,11 @@ private
|
||||
SEV_LABEL[severity] || 'ANY'
|
||||
end
|
||||
|
||||
# Guarantee the existence of this ivar even when subclasses don't call the superclass constructor.
|
||||
def level_override
|
||||
@level_override ||= {}
|
||||
end
|
||||
|
||||
def format_message(severity, datetime, progname, msg)
|
||||
(@formatter || @default_formatter).call(severity, datetime, progname, msg)
|
||||
end
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user