module Kitchen
def self.debug_log(lines)
- Api: - private
Parameters:
-
lines(Array) -- an array of strings to log
def self.debug_log(lines) Array(lines).each { |line| Kitchen.logger.debug(line) } end
def self.file_log(level, lines)
- Api: - private
Parameters:
-
lines(Array) -- an array of strings to log -
level(Symbol, String) -- the desired log level
def self.file_log(level, lines) Array(lines).each do |line| if Kitchen.logger.debug? Kitchen.logger.debug(line) else Kitchen.logger.logdev && Kitchen.logger.logdev.public_send(level, line) end end end
def self.handle_error(e)
- Api: - private
Other tags:
- See: Kitchen.with_friendly_errors -
Parameters:
-
e(StandardError) -- an exception to handle
def self.handle_error(e) stderr_log(Error.formatted_exception(e)) stderr_log("Please see .kitchen/logs/kitchen.log for more details") stderr_log("Also try running `kitchen diagnose --all` for configuration\n") file_log(:error, Error.formatted_trace(e)) end
def self.handle_instance_failure(e)
- Api: - private
Other tags:
- See: Kitchen.with_friendly_errors -
Parameters:
-
e(StandardError) -- an exception to handle
def self.handle_instance_failure(e) stderr_log(e.message.split(/\s{2,}/)) stderr_log(Error.formatted_exception(e.original)) file_log(:error, e.message.split(/\s{2,}/).first) debug_log(Error.formatted_trace(e)) end
def self.stderr_log(lines)
- Api: - private
Parameters:
-
lines(Array) -- an array of strings to log
def self.stderr_log(lines) Array(lines).map { |line| ">>>>>> #{line}" }.each do |line| line = Color.colorize(line, :red) if Kitchen.tty? $stderr.puts(line) end end
def self.with_friendly_errors
-
(SystemExit)- if an exception is raised in the yielded block
def self.with_friendly_errors yield rescue Kitchen::InstanceFailure => e Kitchen.mutex.synchronize do handle_instance_failure(e) end exit 10 rescue Kitchen::Error => e Kitchen.mutex.synchronize do handle_error(e) end exit 20 end
def default_file_logger(level = nil, log_overwrite = nil)
-
(Logger)- a logger
Parameters:
-
log_overwrite(Boolean) -- logging level -
level(Symbol) -- logging level
def default_file_logger(level = nil, log_overwrite = nil) level ||= env_log log_overwrite = log_overwrite.nil? ? env_log_overwrite : log_overwrite log_location = File.expand_path(File.join(DEFAULT_LOG_DIR, "kitchen.log")) log_location = log_location.to_s Logger.new( stdout: $stdout, logdev: log_location, level: Util.to_logger_level(level), log_overwrite: ) end
def default_logger
-
(Logger)- a logger
def default_logger Logger.new(stdout: $stdout, level: Util.to_logger_level(env_log)) end
def env_log
- Api: - private
Returns:
-
(Symbol, nil)- a log level or nil if not set
def env_log ENV["KITCHEN_LOG"] && ENV["KITCHEN_LOG"].downcase.to_sym end
def env_log_overwrite
- Api: - private
Returns:
-
(Boolean, nil)-
def env_log_overwrite case ENV["KITCHEN_LOG_OVERWRITE"] && ENV["KITCHEN_LOG_OVERWRITE"].downcase when nil, "" nil when "false", "f", "no" false else true end end
def source_root
-
(Pathname)- root path of gem
def source_root @source_root ||= Pathname.new(File.expand_path("..", __dir__)) end
def tty?
-
(true, false)- is there a tty?
def tty? $stdout.tty? end