開発ではtail -f log/development.log
を使用し、本番環境ではheroku logs
を使用して、sideqikワーカーの進行状況をログに記録しようとしています。
ただし、ワーカー内のすべて、およびワーカーによって呼び出されたすべてはログに記録されません。以下のコードでは、TEST1のみがログに記録されます。
ワーカー内のすべてとワーカーが呼び出すクラスをログに記録するにはどうすればよいですか?
# 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
をputs
に置き換えることで機能しました。
ワーカー内で使用できるSidekiq.logger
および単にlogger
参照があります。デフォルトはSTDOUTであり、本番環境での出力を選択したログファイルパスに送信する必要があります。
@ migu、config/initializer.rb
で以下のコマンドを試しましたか?
Rails.logger = Sidekiq::Logging.logger