class Logger
Represents a Rails-compatible logger that extends Console::Compatible::Logger with support for silencing and fiber-local log levels.
Definitions
def initialize(...)
Initialize the logger with fiber-local silence support.
Implementation
def initialize(...)
super
@silence_key = :"#{self.class}.silence.#{object_id}"
end
def local_level=(severity)
Set the fiber-local log level for silencing.
Signature
-
parameter
severityInteger The log level severity.
Implementation
def local_level= severity
Fiber[@silence_key] = severity
end
def local_level
Get the fiber-local log level.
Signature
-
returns
Integer | Nil The current fiber-local log level, if any.
Implementation
def local_level
Fiber[@silence_key]
end
def silence(severity = Logger::ERROR)
Silences the logger for the duration of the block.
Signature
-
parameter
severityInteger The minimum severity level to log.
-
yields
{|logger| ...} Yields the logger instance to the block.
-
parameter
loggerLogger The current logger instance.
Implementation
def silence(severity = Logger::ERROR)
current = Fiber[@silence_key]
Fiber[@silence_key] = severity
yield(self)
ensure
Fiber[@silence_key] = current
end
def silenced?(severity)
Check if the logger is silenced for the given severity level.
Signature
-
parameter
severityInteger The log level severity to check.
-
returns
Boolean trueif the logger is silenced for this severity.
Implementation
def silenced?(severity)
if current = Fiber[@silence_key]
severity < current
end
end
def add(severity, message = nil, progname = nil, &block)
Add a log message, respecting the silence level.
Signature
-
parameter
severityInteger The log level severity.
-
parameter
messageString | Nil The log message.
-
parameter
prognameString | Nil The program name.
Implementation
def add(severity, message = nil, progname = nil, &block)
return if silenced?(severity)
super(severity, message, progname, &block)
end
def self.apply!(configuration: ::Rails.configuration)
Configure Rails to use the Console logger.
Signature
-
parameter
configurationRails::Configuration The Rails configuration object to update.
Implementation
def self.apply!(configuration: ::Rails.configuration)
# Set the logger to a compatible logger to catch `Rails.logger` output:
configuration.logger = ActiveSupport::TaggedLogging.new(
Logger.new(::Rails)
)
end