This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
# Released under the MIT License.
|
||||
# Copyright, 2019-2024, by Samuel Williams.
|
||||
# Copyright, 2021, by Bryan Powell.
|
||||
# Copyright, 2021, by Robert Schulze.
|
||||
|
||||
require_relative "output"
|
||||
require_relative "output/failure"
|
||||
|
||||
require_relative "filter"
|
||||
require_relative "event"
|
||||
require_relative "resolver"
|
||||
require_relative "progress"
|
||||
|
||||
require "fiber/local"
|
||||
|
||||
module Console
|
||||
class Logger < Filter[debug: 0, info: 1, warn: 2, error: 3, fatal: 4]
|
||||
extend Fiber::Local
|
||||
|
||||
# Set the default log level based on `$DEBUG` and `$VERBOSE`.
|
||||
# You can also specify CONSOLE_LEVEL=debug or CONSOLE_LEVEL=info in environment.
|
||||
# https://mislav.net/2011/06/ruby-verbose-mode/ has more details about how it all fits together.
|
||||
def self.default_log_level(env = ENV)
|
||||
if level = env["CONSOLE_LEVEL"]
|
||||
LEVELS[level.to_sym] || level.to_i
|
||||
elsif $DEBUG
|
||||
DEBUG
|
||||
elsif $VERBOSE.nil?
|
||||
WARN
|
||||
else
|
||||
INFO
|
||||
end
|
||||
end
|
||||
|
||||
# Controls verbose output using `$VERBOSE`.
|
||||
def self.verbose?(env = ENV)
|
||||
!$VERBOSE.nil? || env["CONSOLE_VERBOSE"]
|
||||
end
|
||||
|
||||
def self.default_logger(output = $stderr, env = ENV, **options)
|
||||
if options[:verbose].nil?
|
||||
options[:verbose] = self.verbose?(env)
|
||||
end
|
||||
|
||||
if options[:level].nil?
|
||||
options[:level] = self.default_log_level(env)
|
||||
end
|
||||
|
||||
output = Output.new(output, env, **options)
|
||||
|
||||
logger = self.new(output, **options)
|
||||
|
||||
Resolver.default_resolver(logger)
|
||||
|
||||
return logger
|
||||
end
|
||||
|
||||
def self.local
|
||||
self.default_logger
|
||||
end
|
||||
|
||||
DEFAULT_LEVEL = 1
|
||||
|
||||
def initialize(output, **options)
|
||||
# This is the expected default behaviour, but it may be nice to have a way to override it.
|
||||
output = Output::Failure.new(output, **options)
|
||||
|
||||
super(output, **options)
|
||||
end
|
||||
|
||||
def progress(subject, total, **options)
|
||||
options[:severity] ||= :info
|
||||
|
||||
Progress.new(subject, total, **options)
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user