2013-06-26 6 views
5

Chciałbym rejestrować rzeczy z poziomu oprogramowania pośredniego, które umieszczam w aplikacji Rails, używając istniejącego programu rejestrującego aplikacji. Czy istnieje standardowy sposób, aby to zrobić? Dwie możliwości, które przychodzą do głowy:Czy logger Railsów może być dostępny z poziomu oprogramowania pośredniczącego Rack?

  1. rejestrator jest dostępny bezpośrednio w środowisku rack
  2. loger mogą być dostępne w czasie aplikacji rozruchowej i przypisany do warstwy pośredniej

poszukiwania rozwiązań obejmujących zarówno z nich nie ma wiele. Nie przemyślałem/eksperymentowałem, aby sprawdzić, czy kolejność operacji jest możliwa.

+1

można spróbować wołając do Rails.logger i zobaczyć ... – rogerdpack

+0

Co wiesz o 'Rails' na podstawie jego nazwy i zasad nazewnictwa Ruby? –

Odpowiedz

2

Udało mi się to zrobić, pisząc własne oprogramowanie pośrednie, które po prostu dodaje Rails.logger do środowiska Rack.

module Something 
    class UseRailsLogger 
    def initialize(app) 
     @app = app 
    end 
    def call(env) 
     env['rack.logger'] ||= Rails.logger 
     @app.call(env) 
    end 
    end 
end 

Jeśli zapas że w lib/something/use_rails_logger.rb, można go dodać do stosu middleware i rejestrator będzie dostępna dla każdej warstwy, która przychodzi po niego.

Uwaga: chciałem dodać go do config/application.rb, ponieważ nie ma powodu, aby to ustawienie było zależne od środowiska, ale z jakiegoś powodu require 'something/use_rails_logger' nie działałby z tego pliku. Dodanie go do config/environment/*.rb działało dobrze. Obok require wszystko czego potrzebujesz to:

config.middleware.use Rack::UseRailsLogger