I'm trying to log the progress of my sideqik worker using tail -f log/development.log
in development and heroku logs
in production.
However, everything inside the worker and everything called by the worker does not get logged. In the code below, only TEST 1 gets logged.
How can I log everything inside the worker and the classes the worker calls?
# 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
Update
I still don't understand why Rails.logger.info
or Sidekiq.logger.info
don't log into the log stream. Got it working by replacing Rails.logger.info
with puts
.
There is a Sidekiq.logger
and simply logger
reference that you can use within your workers. The default should be to STDOUT and you should just direct your output in production to the log file path of your choice.
@migu,您是否在config/initializer.rb
尝试过以下命令?
Rails.logger = Sidekiq::Logging.logger
It works in rails 6:
# config/initializers/sidekiq.rb
Rails.logger = Sidekiq.logger
ActiveRecord::Base.logger = Sidekiq.logger
I've found this solution here , it seems to work well.
Sidekiq uses the Ruby Logger class with default Log Level as INFO
, and its settings are independent from Rails.
You may set the Sidekiq Log Level for the Logger
used by Sidekiq in config/initializers/sidekiq.rb
:
Sidekiq.configure_server do |config|
config.logger.level = Rails.logger.level
end
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.