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 である必要があり、本番環境での出力は選択したログ ファイル パスに送信する必要があります。