Techioz Blog

Sidekiq ワーカー内にログインする

概要

開発では tail -f log/development.log を使用し、運用環境では Heroku ログを使用して、sideqik ワーカーの進行状況をログに記録しようとしています。

ただし、ワーカー内のすべてのものとワーカーによって呼び出されたものはすべてログに記録されません。以下のコードでは、TEST 1 のみがログに記録されます。

ワーカー内のすべてのものとワーカーが呼び出すクラスをログに記録するにはどうすればよいですか?

# app/controllers/TasksController.rb
def import_data
  Rails.logger.info "TEST 1" # shows up in development.log
  DataImportWorker.perform_async
  render "done"           
end

# app/workers/DataImportWorker.rb
class DataImportWorker
  include Sidekiq::Worker

  def perform    
    Rails.logger.info "TEST 2" # does not show up in development.log

    importer = Importer.new
    importer.import_data
  end
end


# app/controllers/services/Importer.rb    
class Importer  
  def import_data
    Rails.logger.info "TEST 3" # does not show up in development.log
  end
end

アップデート

Rails.logger.info または Sidekiq.logger.info がログ ストリームにログインしない理由はまだわかりません。 Rails.logger.info を put に置き換えることで機能するようになりました。

解決策

ワーカー内で使用できる Sidekiq.logger と単純なロガー参照があります。デフォルトは STDOUT である必要があり、本番環境での出力は選択したログ ファイル パスに送信する必要があります。