class RailsTwirp::LogSubscriber

Public Instance Methods

process_action(event) click to toggle source
# File lib/rails_twirp/log_subscriber.rb, line 13
def process_action(event)
  payload = event.payload
  exception_raised(payload[:http_request], payload[:exception_object]) if payload[:exception_object]

  info do
    code = payload.fetch(:code, :internal)

    message = +"Completed #{code} in #{event.duration.round}ms (Allocations: #{event.allocations})"
    message << "\n\n" if defined?(Rails.env) && Rails.env.development?

    message
  end
end
start_processing(event) click to toggle source
# File lib/rails_twirp/log_subscriber.rb, line 5
def start_processing(event)
  return unless logger.info?

  payload = event.payload

  info "Processing by #{payload[:controller]}##{payload[:action]}"
end

Private Instance Methods

exception_raised(request, exception) click to toggle source
# File lib/rails_twirp/log_subscriber.rb, line 29
def exception_raised(request, exception)
  backtrace_cleaner = request.get_header("action_dispatch.backtrace_cleaner")
  wrapper = ActionDispatch::ExceptionWrapper.new(backtrace_cleaner, exception)

  log_error(wrapper)
end
log_array(array) click to toggle source
# File lib/rails_twirp/log_subscriber.rb, line 50
def log_array(array)
  lines = Array(array)

  return if lines.empty?

  if logger.formatter&.respond_to?(:tags_text)
    fatal { lines.join("\n#{logger.formatter.tags_text}") }
  else
    fatal { lines.join("\n") }
  end
end
log_error(wrapper) click to toggle source
# File lib/rails_twirp/log_subscriber.rb, line 36
def log_error(wrapper)
  exception = wrapper.exception
  trace = wrapper.exception_trace

  message = []
  message << "  "
  message << "#{exception.class} (#{exception.message}):"
  message.concat(exception.annotated_source_code) if exception.respond_to?(:annotated_source_code)
  message << "  "
  message.concat(trace)

  log_array(message)
end