Class: Prefab::LogSubscribers::ActionControllerSubscriber

Inherits:
ActiveSupport::LogSubscriber
  • Object
show all
Defined in:
lib/prefab/log_subscribers/action_controller_subscriber.rb

Constant Summary collapse

INTERNAL_PARAMS =
%w[controller action format _method only_path].freeze
LOG =
Prefab::StaticLogger.new("rails.controller.request")

Instance Method Summary collapse

Instance Method Details

#process_action(event) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/prefab/log_subscribers/action_controller_subscriber.rb', line 26

def process_action(event)
  payload = event.payload.dup
  payload.delete(:headers)
  payload.delete(:request)
  payload.delete(:response)
  payload[:req_path] = payload.delete(:path)
  params = payload[:params]

  if params.kind_of?(Hash) || params.kind_of?(::ActionController::Parameters)
    payload[:params] = params.to_unsafe_h unless params.is_a?(Hash)
    payload[:params] = params.except(*INTERNAL_PARAMS)

    if payload[:params].empty?
      payload.delete(:params)
    elsif params["file"]
      # When logging to JSON the entire tempfile is logged, so convert it to a string.
      payload[:params]["file"] = params["file"].inspect
    end
  end

  # Rounds off the runtimes. For example, :view_runtime, :mongo_runtime, etc.
  payload.keys.each do |key|
    payload[key] = payload[key].to_f.round(2) if key.to_s =~ /(.*)_runtime/
  end

  LOG.info "#{payload[:status]} #{payload[:controller]}##{payload[:action]}", **payload
end