mirror of
https://github.com/ruby/ruby.git
synced 2025-09-15 08:33:58 +02:00
[ruby/logger] Enable subclasses to configure level isolation
(https://github.com/ruby/logger/pull/103)
`Logger#with_level` was recently added to enable configuring a
`Logger`'s level for the duration of a block. However, the configured
level is always tied to the currently running `Fiber`, which is not
always ideal in applications that mix `Thread`s and `Fiber`s.
For example, Active Support has provided a similar feature
(`ActiveSupport::Logger#log_at`) which, depending on configuration, can
be isolated to either `Thread`s or `Fiber`s.
This commit enables subclasses of `Logger` to customize the level
isolation. Ideally, it will enable replacing most of Active Support's
`#log_at`, since both methods end up serving the same purpose.
dae2b832cd
This commit is contained in:
parent
6bc614260d
commit
342455e56f
2 changed files with 47 additions and 7 deletions
|
@ -381,7 +381,7 @@ class Logger
|
|||
|
||||
# Logging severity threshold (e.g. <tt>Logger::INFO</tt>).
|
||||
def level
|
||||
level_override[Fiber.current] || @level
|
||||
level_override[level_key] || @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[level_key] = level, Severity.coerce(severity)
|
||||
begin
|
||||
yield
|
||||
ensure
|
||||
if prev
|
||||
level_override[Fiber.current] = prev
|
||||
level_override[level_key] = prev
|
||||
else
|
||||
level_override.delete(Fiber.current)
|
||||
level_override.delete(level_key)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -751,6 +751,10 @@ private
|
|||
@level_override ||= {}
|
||||
end
|
||||
|
||||
def level_key
|
||||
Fiber.current
|
||||
end
|
||||
|
||||
def format_message(severity, datetime, progname, msg)
|
||||
(@formatter || @default_formatter).call(severity, datetime, progname, msg)
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue