diff --git a/config/initializers/sidekiq.rb b/config/initializers/sidekiq.rb index b1cfa5a266..eaf5c00d6a 100644 --- a/config/initializers/sidekiq.rb +++ b/config/initializers/sidekiq.rb @@ -3,6 +3,7 @@ require 'three_scale/sidekiq_retry_support' require 'three_scale/sidekiq_logging_middleware' require 'sidekiq/throttled' +require 'sidekiq/logging' Sidekiq::Throttled.setup! @@ -49,3 +50,19 @@ chain.add ThreeScale::SidekiqLoggingMiddleware end end + +module Sidekiq + module Logging + # override existing log to include the arguments passed to `perform` + # source: https://github.com/sidekiq/sidekiq/issues/1786#issuecomment-313461945 + # NOTE: needs to be changed after upgrading to Sidekiq 6 + def self.job_hash_context(job_hash) + # If we're using a wrapper class, like ActiveJob, use the "wrapped" + # attribute to expose the underlying thing. + klass = job_hash['wrapped'] || job_hash['class'] + bid = job_hash['bid'] + args = job_hash['args'] + "#{klass} JID-#{job_hash['jid']}#{" BID-#{bid}" if bid}#{" ARGS-#{args}" if args}" + end + end +end diff --git a/test/unit/sidekiq_initializer_test.rb b/test/unit/sidekiq_initializer_test.rb new file mode 100644 index 0000000000..8e4b3422e8 --- /dev/null +++ b/test/unit/sidekiq_initializer_test.rb @@ -0,0 +1,22 @@ +# frozen_string_literal: true + +require 'test_helper' + +class SidekiqInitializerTest < ActiveSupport::TestCase + test 'log job arguments' do + logged = false + invoice = FactoryBot.create(:invoice) + + Rails.logger.stubs(:info).with do |msg| + next(true) unless /Enqueued InvoiceFriendlyIdWorker/.match?(msg) + + logged = msg.include?("with args: [#{invoice.id}]") + end + + with_sidekiq do + InvoiceFriendlyIdWorker.perform_async(invoice.id) + end + + assert logged + end +end