diff --git a/lib/rails_semantic_logger/active_record/log_subscriber.rb b/lib/rails_semantic_logger/active_record/log_subscriber.rb index 357303b..54d2abb 100644 --- a/lib/rails_semantic_logger/active_record/log_subscriber.rb +++ b/lib/rails_semantic_logger/active_record/log_subscriber.rb @@ -33,6 +33,7 @@ def sql(event) log_payload[:binds] = bind_values(payload) unless (payload[:binds] || []).empty? log_payload[:allocations] = event.allocations if event.respond_to?(:allocations) log_payload[:cached] = event.payload[:cached] + log_payload[:async] = true if event.payload[:async] log = { message: name, diff --git a/test/active_record_test.rb b/test/active_record_test.rb index 0fc3866..3ebb7d4 100644 --- a/test/active_record_test.rb +++ b/test/active_record_test.rb @@ -131,6 +131,30 @@ class ActiveRecordTest < Minitest::Test } ) end + + it "marks async queries with async: true" do + skip "Not applicable to older rails" if Rails.version.to_f < 7.1 + + expected_sql = 'SELECT COUNT(*) FROM "samples"' + + messages = semantic_logger_events do + Sample.count + Sample.async_count.value + end + assert_equal 2, messages.count, messages + + messages.each do |message| + assert_semantic_logger_event( + message, + level: :debug, + name: "ActiveRecord", + message: "Sample Count", + payload_includes: {sql: expected_sql} + ) + end + refute messages[0].payload.key?(:async) + assert_equal true, messages[1].payload[:async] + end end end end diff --git a/test/dummy/config/application.rb b/test/dummy/config/application.rb index 5dab859..068c61e 100644 --- a/test/dummy/config/application.rb +++ b/test/dummy/config/application.rb @@ -11,6 +11,7 @@ class Application < Rails::Application # Configure sensitive parameters which will be filtered from the log file. config.filter_parameters += [:password] config.active_record.sqlite3.represent_boolean_as_integer = true if config.active_record.sqlite3 + config.active_record.async_query_executor = :global_thread_pool # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers