diff --git a/lib/logstasher/rails_ext/action_controller/metal/instrumentation.rb b/lib/logstasher/rails_ext/action_controller/metal/instrumentation.rb index d7a00b3..c4af634 100644 --- a/lib/logstasher/rails_ext/action_controller/metal/instrumentation.rb +++ b/lib/logstasher/rails_ext/action_controller/metal/instrumentation.rb @@ -4,6 +4,8 @@ module ActionController module Instrumentation alias orig_process_action process_action def process_action(*args) + ActiveSupport::ExecutionContext[:controller] = self if Rails.version.to_i >= 7 + raw_payload = { controller: self.class.name, action: action_name, diff --git a/spec/lib/logstasher/instrumentation_spec.rb b/spec/lib/logstasher/instrumentation_spec.rb index c4f7de9..e857d99 100644 --- a/spec/lib/logstasher/instrumentation_spec.rb +++ b/spec/lib/logstasher/instrumentation_spec.rb @@ -22,6 +22,18 @@ def subject.index(*_args) end describe '.process_action' do + if Rails.version.to_i >= 7 + it 'sets the controller in ActiveSupport::ExecutionContext' do + expect(ActiveSupport::ExecutionContext).to receive(:[]=).with(:controller, subject) + subject.send(:process_action, :index) + end + else + it 'does not set the controller in ActiveSupport::ExecutionContext' do + expect(ActiveSupport::ExecutionContext).not_to receive(:[]=).with(:controller, anything) + subject.send(:process_action, :index) + end + end + it 'adds default fields to payload' do expect(LogStasher).to receive(:add_default_fields_to_payload).once expect(LogStasher).to receive(:add_default_fields_to_request_context).once