Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Log inside Sidekiq worker

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.

like image 665
migu Avatar asked Jul 12 '13 01:07

migu


2 Answers

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.

like image 85
paul Avatar answered Oct 11 '22 13:10

paul


@migu, have you tried the below command in the config/initializer.rb ?

Rails.logger = Sidekiq::Logging.logger
like image 44
Sana Avatar answered Oct 11 '22 11:10

Sana