Sha256: 41e2e400847366120618df9553ec8d73c121127d31c235ddb5f0bb687aa9dbd6

Contents?: true

Size: 1.59 KB

Versions: 62

Compression:

Stored size: 1.59 KB

Contents

require "action_dispatch/middleware/debug_exceptions"

module GovukLogging
  module RailsExt
    module ActionDispatch
      def self.should_monkey_patch_log_error?(clazz = ::ActionDispatch::DebugExceptions)
        empty_instance = clazz.new nil
        target_method = empty_instance.method :log_error

        expected_parameters = [%i[req request], %i[req wrapper]]
        actual_parameters = target_method.parameters

        should_monkey_patch = actual_parameters == expected_parameters

        unless should_monkey_patch
          Rails.logger.warn "Refused to monkey patch ::ActionDispatch::DebugExceptions#log_error - " \
            "signatures do not match. " \
            "Expected #{expected_parameters}, but got #{actual_parameters}"
        end

        should_monkey_patch
      rescue StandardError => e
        Rails.logger.warn "Failed to detect whether to monkey patch " \
          "::ActionDispatch::DebugExceptions#log_error - #{e.inspect}"
        false
      end

      def self.monkey_patch_log_error(clazz = ::ActionDispatch::DebugExceptions)
        clazz.class_eval do
          private

          def log_error(request, wrapper)
            logger = logger(request)

            return unless logger

            exception = wrapper.exception

            trace = wrapper.application_trace
            trace = wrapper.framework_trace if trace.empty?

            logger.fatal({
              exception_class: exception.class.to_s,
              exception_message: exception.message,
              stacktrace: trace,
            }.to_json)
          end
        end
      end
    end
  end
end

Version data entries

62 entries across 62 versions & 1 rubygems

Version Path
govuk_app_config-8.1.1 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-8.1.0 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-8.0.2 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-8.0.1 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-8.0.0 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-7.2.1 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-7.2.0 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-7.1.0 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-7.0.0 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-6.0.1 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-6.0.0 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-5.1.0 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-5.0.0 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-4.13.0 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-4.12.0 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-4.11.1 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-4.11.0 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-4.10.1 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-4.10.0 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb
govuk_app_config-4.9.0 lib/govuk_app_config/rails_ext/action_dispatch/debug_exceptions.rb