19

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.

migu
  • 4,236
  • 5
  • 39
  • 60

4 Answers4

14

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.

Drew Stephens
  • 17,207
  • 15
  • 66
  • 82
paul
  • 422
  • 4
  • 6
  • 1
    Thanks. `logger.info "Some log"` logs into the terminal window where I launched `bundle exec sidekiq` but not in development.log. I tried `bundle exec sidekiq 2>&1 | logger -t sidekiq` but then the logs appear nowhere. – migu Jul 12 '13 at 05:03
  • 5
    Same issue. This should not be marked as a solution. – johnnygoodman Dec 03 '15 at 15:20
3

It works in rails 6:

# config/initializers/sidekiq.rb

Rails.logger = Sidekiq.logger
ActiveRecord::Base.logger = Sidekiq.logger
Helio Albano
  • 828
  • 9
  • 16
2

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

Rails.logger = Sidekiq::Logging.logger
Sana
  • 9,895
  • 15
  • 59
  • 87
0

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
Ramon Dias
  • 835
  • 2
  • 12
  • 23