From 50af095c4e45d930058e252018bcfc6f1660ccad Mon Sep 17 00:00:00 2001 From: pvincent Date: Wed, 12 Jun 2024 22:20:48 +0400 Subject: [PATCH] backtrace_cleaning --- config/database.yml | 2 +- config/initializers/backtrace_cleaning.rb | 2 ++ lib/formatters/ansi_formatter.rb | 22 ++++++++----- .../active_record/log_subscriber.rb | 31 ------------------- 4 files changed, 17 insertions(+), 40 deletions(-) create mode 100644 config/initializers/backtrace_cleaning.rb delete mode 100644 lib/monkey_patches/active_record/log_subscriber.rb diff --git a/config/database.yml b/config/database.yml index 2334a0c..fb2c4bc 100644 --- a/config/database.yml +++ b/config/database.yml @@ -6,7 +6,7 @@ default: &default # For details on connection pooling, see Rails configuration guide # https://guides.rubyonrails.org/configuring.html#database-pooling pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> - host: ct1.lxd + host: 127.0.0.1 development: <<: *default diff --git a/config/initializers/backtrace_cleaning.rb b/config/initializers/backtrace_cleaning.rb new file mode 100644 index 0000000..f9c178d --- /dev/null +++ b/config/initializers/backtrace_cleaning.rb @@ -0,0 +1,2 @@ +bc = Rails.backtrace_cleaner +bc.add_silencer { |line| %r{^lib/(monkey_patches|formatters)}.match?(line) } diff --git a/lib/formatters/ansi_formatter.rb b/lib/formatters/ansi_formatter.rb index 3161b09..2aa4db7 100644 --- a/lib/formatters/ansi_formatter.rb +++ b/lib/formatters/ansi_formatter.rb @@ -95,7 +95,19 @@ class AnsiFormatter < SemanticLogger::Formatters::Color def build_terminus = "#{origin} #{TERMINUS_STRING} " def centerize(text) = text.truncate(CENTER_SIZE).center(CENTER_SIZE) def colorize(text, tint = color) = "#{tint}#{text}#{CLEAR}" - def stackisize(items) = items.length.positive? ? "\n#{items.join("\n")}" : '' + + def stackisize(items) + return '' if items.empty? + + traces = items.map do |item| + trace = item.match(/(.*:\d+):in `(.*)'/) + next item unless trace + + m1, m2 = trace.captures + "↳ #{m1} #{AnsiColors::BOLD}#{m2}#{AnsiColors::CLEAR}" + end + "\n#{traces.join("\n")}" + end def build_dimensions(dimensions) "#{origin} #{dimensions.rails} " @@ -117,17 +129,11 @@ class AnsiFormatter < SemanticLogger::Formatters::Color exc = log.exception clazz = colorize("#{exc.class}\n", color_map[:fatal]) message = colorize(exc.message.chomp(''), color_map[:error]) - backtrace = stackisize(clean_backtrace(exc.backtrace)) + backtrace = stackisize(Rails.backtrace_cleaner.clean(exc.backtrace)) "#{clazz}#{message}#{backtrace}" end - def clean_backtrace(backtrace) - root_path = Rails.root.to_s - backtrace = backtrace.select { |line| line.starts_with?(root_path) } - backtrace.map { |line| line.delete_prefix("#{root_path}/") } - end - def level_char case log.level when :info, :debug then ' ' diff --git a/lib/monkey_patches/active_record/log_subscriber.rb b/lib/monkey_patches/active_record/log_subscriber.rb deleted file mode 100644 index ebc9fc8..0000000 --- a/lib/monkey_patches/active_record/log_subscriber.rb +++ /dev/null @@ -1,31 +0,0 @@ -# frozen_string_literal: true - -module ActiveRecord - class LogSubscriber < ActiveSupport::LogSubscriber - def log_query_source - source = query_source_location - - puts 'DEBUG logSubscriber monkeying' - - return unless source - - logger.debug(" ↳ #{source}") - end - - if Thread.respond_to?(:each_caller_location) - def query_source_location - Thread.each_caller_location do |location| - frame = backtrace_cleaner.clean_frame(location) - return frame if frame - end - nil - end - else - def query_source_location - backtrace_cleaner.clean(caller(1).lazy).first - end - end - end -end - -ActiveRecord::LogSubscriber.attach_to :active_record