require 'logger' require 'shellwords' require_relative 'ext/string' module Dply class CustomLogger < ::Logger attr_writer :trace_mode, :remote_mode, :enable_markers def initialize(file) super(file) @level = ::Logger::INFO @saved_logdev = @logdev @trace_mode = false end def format_message(severity, timestamp, progname, msg) case severity when "INFO" "#{msg}\n" when "ERROR" "#{severity.bold.red} #{msg}\n" when "WARN" "#{severity.downcase.bold.yellow} #{msg}\n" else "#{severity[0].bold.blue} #{msg}\n" end end def command(command, mode:) str = command.is_a?(Array) ? shelljoin(command) : command case mode when :arrow arrow str when :bullet bullet str when :warn warn str else debug str end end def arrow(msg) info "#{"\u2023".green.bold} #{msg}" end def bullet(msg) info "#{"\u2219".bold.blue} #{msg}" end def trace(msg = nil) return if not @trace_mode msg = yield if block_given? info %(#{"T".bold.blue} #{msg}) end def remote(msg) return if not @remote_mode info %{dply_msg|#{msg}} end def marker(msg) return if not @enable_markers info "dply_marker:#{msg}" end private def shelljoin(command) arr = command.map do |i| case i when /\A[A-Za-z0-9._\-=+:\/]+\z/ i when /\A[^']+\z/ %('#{i}') else i.shellescape end end arr.join " " end def disable @logdev = nil end def enable @logdev = @saved_logdev end end end