diff --git a/lib/formatters/basic_formatter.rb b/lib/formatters/basic_formatter.rb index 7a508b1..dd637e6 100644 --- a/lib/formatters/basic_formatter.rb +++ b/lib/formatters/basic_formatter.rb @@ -11,6 +11,8 @@ class BasicFormatter < SemanticLogger::Formatters::Color # rubocop:disable Metri RENDERED_VIEW_DURATION = 100 + ANSI_RESET = "\e[0m".freeze + ANSI_BOLD = "\e[1m".freeze ANSI_DEBUG = "\e[90m".freeze ANSI_INFO = SemanticLogger::AnsiColors::GREEN ANSI_WARN = SemanticLogger::AnsiColors::YELLOW @@ -28,6 +30,7 @@ class BasicFormatter < SemanticLogger::Formatters::Color # rubocop:disable Metri fatal: ANSI_REVERSED_FATAL ) + # exclude log eagerly! EXCLUDE_LAMBDA = lambda { |log| if log.name == 'ActionView::Base' !log.message.starts_with?(' Rendering') @@ -110,17 +113,29 @@ class BasicFormatter < SemanticLogger::Formatters::Color # rubocop:disable Metri draw_rails('┆') end + # transform log before display def transform_log(log) if log.name == 'ActionView::Base' log = transform_action_view_base(log) elsif log.name == 'Rails' && log.message - message = log.message.rstrip - message += "\n" if message.starts_with?('Completed 2') || message.starts_with?('Completed 3') - log.message = message + log.message = transform_rails_message(log.message) end log end + def transform_rails_message(message) + message.rstrip! + case message + when /^Completed [23]/ + "#{message}\n" + when /^Started/ + md = message.match(/(^Started \w* )"(.*?)"/) + "#{md.match(1)}#{ANSI_BOLD}#{md.match(2)}#{ANSI_RESET}" + else + message + end + end + def transform_action_view_base(log) log.level, message = transform_log_debug_lstrip(log) message = transform_rendered_message_with_filename(message) @@ -170,9 +185,9 @@ class BasicFormatter < SemanticLogger::Formatters::Color # rubocop:disable Metri end def backtrace(stack) - return unless stack.count.positive? + return "\n" unless stack.count.positive? - "\n#{before_message} #{ANSI_ERROR}↳ #{stack.join("\n#{before_message} #{ANSI_ERROR}↳ ")}#{color_map.clear}" + "\n#{before_message} #{ANSI_ERROR}↳ #{stack.join("\n#{before_message} #{ANSI_ERROR}↳ ")}#{color_map.clear}\n" end def color_content