Console::Adapter::RailsSourceConsoleAdapterRailsLogger

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 severity Integer

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 severity Integer

The minimum severity level to log.

yields {|logger| ...}

Yields the logger instance to the block.

parameter logger Logger

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 severity Integer

The log level severity to check.

returns Boolean

true if 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 severity Integer

The log level severity.

parameter message String | Nil

The log message.

parameter progname String | 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 configuration Rails::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