class Console::Terminal::Logger
def build_prefix(name)
def build_prefix(name) if @verbose "#{time_offset_prefix} #{name.rjust(8)}" else time_offset_prefix end end
def call(subject = nil, *arguments, name: nil, severity: UNKNOWN, &block)
def call(subject = nil, *arguments, name: nil, severity: UNKNOWN, &block) prefix = build_prefix(name || severity.to_s) indent = " " * prefix.size buffer = Buffer.new("#{indent}| ") if subject format_subject(severity, prefix, subject, buffer) end arguments.each do |argument| format_argument(argument, buffer) end if block_given? if block.arity.zero? format_argument(yield, buffer) else yield(buffer, @terminal) end end @io.write buffer.string end
def format_argument(argument, output)
def format_argument(argument, output) case argument when Exception Event::Failure.new(argument).format(output, @terminal, @verbose) when Event::Generic argument.format(output, @terminal, @verbose) else format_value(argument, output) end end
def format_subject(severity, prefix, subject, output)
def format_subject(severity, prefix, subject, output) prefix_style = @terminal[severity] if @verbose suffix = " #{@terminal[:logger_suffix]}[pid=#{Process.pid}]#{@terminal.reset}" end output.puts "#{@terminal[:logger_prefix]}#{subject}#{@terminal.reset}#{suffix}", prefix: "#{prefix_style}#{prefix}:#{@terminal.reset} " end
def format_value(value, output)
def format_value(value, output) string = value.to_s string.each_line do |line| output.puts "#{line}" end end
def initialize(io = $stderr, verbose: nil, **options)
def initialize(io = $stderr, verbose: nil, **options) @io = io @start = Time.now @terminal = Terminal.for(io) if verbose.nil? @verbose = !@terminal.colors? else @verbose = verbose end @terminal[:logger_prefix] ||= @terminal.style(nil, nil, nil) @terminal[:logger_suffix] ||= @terminal.style(:white, nil, :faint) @terminal[:debug] = @terminal.style(:cyan) @terminal[:info] = @terminal.style(:green) @terminal[:warn] = @terminal.style(:yellow) @terminal[:error] = @terminal.style(:red) @terminal[:fatal] = @terminal[:error] self.register_defaults(@terminal) end
def register_defaults(terminal)
def register_defaults(terminal) Event.constants.each do |constant| klass = Event.const_get(constant) klass.register(terminal) end end
def time_offset_prefix
def time_offset_prefix offset = Time.now - @start minutes = (offset/60).floor seconds = (offset - (minutes*60)) if minutes > 0 "#{minutes}m#{seconds.floor}s" else "#{seconds.round(2)}s" end.rjust(6) end
def verbose!(value = true)
def verbose!(value = true) @verbose = value end