Console SourceConsoleResolver

class Resolver

Definitions

def self.default_resolver(logger, env = ENV)

You can change the log level for different classes using CONSOLE_$LEVEL env vars.

e.g. CONSOLE_WARN=Acorn,Banana CONSOLE_DEBUG=Cat will set the log level for the classes Acorn and Banana to warn and Cat to debug. This overrides the default log level.

You can enable all log levels for a given class by using CONSOLE_ON=MyClass. Similarly you can disable all logging using CONSOLE_OFF=MyClass.

Signature

parameter logger Logger

A logger instance to set the logging levels on.

parameter env Hash

The environment to read levels from.

returns Nil

If there were no custom logging levels specified in the environment.

returns Resolver

If there were custom logging levels, then the created resolver is returned.

Implementation

def self.default_resolver(logger, env = ENV)
	# Find all CONSOLE_$LEVEL variables from environment:
	levels = logger.class::LEVELS
		.map{|label, level| [level, env["CONSOLE_#{label.upcase}"]&.split(',')]}
		.to_h
		.compact
	
	off_klasses = env['CONSOLE_OFF']&.split(',')
	on_klasses = env['CONSOLE_ON']&.split(',')
	
	resolver = nil
	
	# If we have any levels, then create a class resolver, and each time a class is resolved, set the log level for that class to the specified level:
	if on_klasses&.any?
		resolver ||= Resolver.new
		
		resolver.bind(on_klasses) do |klass|
			logger.enable(klass, logger.class::MINIMUM_LEVEL - 1)
		end
	end
	
	if off_klasses&.any?
		resolver ||= Resolver.new
		
		resolver.bind(off_klasses) do |klass|
			logger.disable(klass)
		end
	end
	
	levels.each do |level, names|
		resolver ||= Resolver.new
		
		resolver.bind(names) do |klass|
			logger.enable(klass, level)
		end
	end
	
	return resolver
end