2013-07-12 10 views
14

Ich versuche, den Fortschritt meiner sideqik Arbeiter mit tail -f log/development.log in Entwicklung und heroku logs in der Produktion zu protokollieren.Einloggen Sidekiq Arbeiter

Jedoch wird alles im Worker und alles, was der Worker anruft, nicht eingeloggt. Im folgenden Code wird nur TEST 1 protokolliert.

Wie kann ich alles im Worker und die Klassen, die der Worker aufruft, protokollieren?

# 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 

aktualisieren

Ich verstehe immer noch nicht, warum Rails.logger.info oder Sidekiq.logger.info nicht in den Protokollstrom protokollieren. Es funktioniert, indem Rails.logger.info durch puts ersetzt wird.

Antwort

8

Es gibt eine Sidekiq.logger und einfach logger Referenz, die Sie in Ihren Mitarbeitern verwenden können. Der Standardwert sollte STDOUT sein und Sie sollten Ihre Ausgabe in der Produktion nur auf den Protokolldateipfad Ihrer Wahl richten.

+1

Danke. 'logger.info" Some log "' loggt sich in das Terminal-Fenster ein, wo ich 'bundle exec sidekiq' gestartet habe, aber nicht in development.log. Ich habe versucht 'bundle exec sidekiq 2> & 1 | logger -t sidekiq, aber dann erscheinen die Protokolle nirgends. – migu

+0

Gleiches Problem. Dies sollte nicht als Lösung markiert werden. – johnnygoodman

1

@migu, haben Sie den folgenden Befehl in der config/initializer.rb ausprobiert?

Rails.logger = Sidekiq::Logging.logger 
Verwandte Themen