2013-08-07 13 views
5

Mam aplikację opartą na Rails 3.2, która używa Sidekiq 2.12 do uruchamiania zadań w tle. Zadania Sidekiq mogą wywoływać te same metody, co interaktywna aplikacja Rails. Chciałbym, aby metody rejestrowały się w dzienniku Sidekiq po wywołaniu z Sidekiq i logowały się do dziennika Rails, gdy wywołano go z Rails. Szukam czystego sposobu, aby to zrobić, ale do tej pory pojawiły się puste.Zaloguj się do innego programu rejestrującego na podstawie wywołania z Sidekiq lub Rails

W obu środowiskach zdefiniowano i działają zarówno Sidekiq::Logging.logger, jak i Rails.logger.

  • Nie chcę sprawdzać stosu wywołań przy każdej próbie logowania w celu wybrania odpowiedniego loggera.
  • Nie chcę przekazywać obiektu dziennika jako parametru funkcji do każdej funkcji, która może zostać wywołana zarówno z Sidekiq, jak i Rails.

myślę prawdopodobnie słuszne zrobić jest mieć Sidekiq zastąpić rejestratora Rails ze swoim rejestratorem podczas procesu uruchamiania, a następnie zawsze zalogować się do rejestratora Rails, ale nie mogę znaleźć haka initializer że biegnie po program rejestrujący Rails jest skonfigurowany, ale przed uruchomieniem zadań Sidekiq jest uruchamiany tylko przez Sidekiq.

Czy istnieje taki hak? Jeśli tak, proszę, powiedz mi o tym. Jeśli nie, podaj inne sugestie dotyczące czystego przekierowania danych wyjściowych rejestrowania na podstawie środowiska operacyjnego Sidekiq i Rails.

Odpowiedz

23

Zarówno Sidekiq, jak i Rails używają klas zgodnych z Logger z Ruby StdLib.

Powinieneś być w stanie ponownie skonfigurować program rejestrujący Rails, aby użyć rejestratora Sidekiq w bloku konfiguracyjnym serwera Sidekiq. Znajdź/utworzyć plik jak config/inititializers/sidekiq.rb:

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

    # Sidekiq other server config 
    ... 
end 

przekazany do wywołania Sidekiq.configure_server blok jest wykonywany tylko w ramach komponentu Server backend Sidekiq, nie w kliencie uruchomiony w Rails serwera aplikacji lub konsoli.

+0

Z tego co wiem, spowoduje to, że aplikacja Railsowa będzie również używać rejestratora Sidekiq. Chcę, aby aplikacja Rail (odpowiadająca na żądania sieciowe) logowała się do logi Rails i procesów Sidekiq, aby zalogować się do rejestratora Sidekiq. –

+3

To nie jest poprawne. Blok przekazany do wywołania funkcji Sidekiq.configure_server jest wykonywany tylko w ramach komponentu Server w zapleczu Sidekiq, a nie w kliencie działającym na serwerze lub konsoli aplikacji Rails. – Winfield

Powiązane problemy