module Hyla class Logger attr_accessor :log_level DEBUG = 0 INFO = 1 WARN = 2 ERROR = 3 FATAL = 4 # Public: Create a new instance of Hyla's logger # # level - (optional, integer) the log level # # Returns nothing def initialize(level = INFO) @log_level = level end # Public: Print a Hyla debug message to stdout # # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. # message - the message detail # # Returns nothing def debug(topic, message = nil) $stdout.puts(message(topic, message)) if log_level <= DEBUG end # Public: Print a hyla message to stdout # # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. # message - the message detail # # Returns nothing def info(topic, message = nil) $stdout.puts(message(topic, message)) if log_level <= INFO end # Public: Print a hyla message to stderr # # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. # message - the message detail # # Returns nothing def warn(topic, message = nil) $stderr.puts(message(topic, message).yellow) if log_level <= WARN end # Public: Print a hyla error message to stderr # # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. # message - the message detail # # Returns nothing def error(topic, message = nil) $stderr.puts(message(topic, message).red) if log_level <= ERROR end # Public: Print a hyla error message to stderr and immediately abort the process # # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. # message - the message detail (can be omitted) # # Returns nothing def abort_with(topic, message = nil) error(topic, message) abort end # Public: Build a hyla topic method # # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. # message - the message detail # # Returns the formatted message def message(topic, message) formatted_topic(topic) + message.to_s.gsub(/\s+/, ' ') end # Public: Format the topic # # topic - the topic of the message, e.g. "Configuration file", "Deprecation", etc. # # Returns the formatted topic statement def formatted_topic(topic) "#{topic} ".rjust(20) end end end