2013-08-07 11 views
5

Possiedo un'applicazione basata su Rails 3.2 che utilizza Sidekiq 2.12 per eseguire processi in background. I lavori di Sidekiq possono chiamare gli stessi metodi dell'app interattiva Rails. Vorrei che i metodi per accedere al log Sidekiq quando chiamato da Sidekiq e accedere al log Rails quando chiamato da Rails. Sto cercando un modo pulito per farlo, ma finora sono uscito vuoto.Accedere a un altro registratore in base alla chiamata da Sidekiq o Rails

In entrambi gli ambienti, sia Sidekiq::Logging.logger sia Rails.logger sono definiti e funzionano.

  • Non voglio ispezionare lo stack di chiamate ad ogni tentativo di registrazione per scegliere il logger giusto.
  • Non voglio passare un oggetto log come parametro di funzione a tutte le funzioni che potrebbero essere chiamate da Sidekiq e Rails.

Penso che probabilmente la cosa giusta da fare è quello di avere Sidekiq sostituire il registratore Rails con il suo registratore durante il processo di avvio e poi sempre accedere al logger di Rails, ma non riesco a trovare un gancio di inizializzazione che viene eseguito dopo il logger Rails è impostato ma prima che i lavori di Sidekiq siano avviati e sia eseguito solo da Sidekiq.

C'è un tale gancio? Se è così, per favore parlamene. In caso contrario, fornire altri suggerimenti su come reindirizzare in modo pulito l'output di registrazione in base all'ambiente operativo Sidekiq vs Rails.

risposta

23

Sia Sidekiq che Rails utilizzano classi conformi a Logger da Ruby StdLib.

Si dovrebbe essere in grado di riconfigurare il registratore di rails per utilizzare il logger Sidekiq nel blocco di configurazione del server Sidekiq. Trovare/creare un file come config/inititializers/sidekiq.rb:

Sidekiq.configure_server do |config| 
    Rails.logger = Sidekiq::Logging.logger 

    # Sidekiq other server config 
    ... 
end 

Il blocco passato alla chiamata Sidekiq.configure_server viene eseguita solo all'interno del componente server di backend Sidekiq, non all'interno del client in esecuzione nel vostro Rails application server o console.

+0

Per quanto posso dire, ciò farà sì che l'app Rails utilizzi anche il logger Sidekiq. Voglio che l'app Rail (che risponde alle richieste web) si colleghi al logger Rails e ai processi Sidekiq per accedere al logger Sidekiq. –

+3

Non è corretto. Il blocco passato alla chiamata Sidekiq.configure_server viene eseguito solo all'interno del componente Server del back-end Sidekiq, non all'interno del client in esecuzione nel server o console dell'app Rails. – Winfield

Problemi correlati