2013-06-26 3 views
5

Ich möchte Dinge aus einer Middleware heraus protokollieren, die ich in eine Rails-App einlege, indem ich den vorhandenen Logger der App verwende. Gibt es einen Standard Weg dies zu tun? Zwei Möglichkeiten, die in den Sinn kommen:Kann auf den Rails-Logger von einer Rack-Middleware aus zugegriffen werden?

  1. der Logger ist direkt in der Rack-Umgebung
  2. die loger kann

Suche nach Lösungen für die Middleware bei App Booten und zugewiesen zugegriffen werden, die entweder von diesen ergibt sich nicht viel. Ich habe nicht gründlich durchdacht/experimentiert, um zu sehen, ob die Reihenfolge der Operationen möglich ist.

+1

Sie könnten versuchen, zu Rails.logger rufen und sehen ... – rogerdpack

+0

Was wissen Sie über 'Rails' basierend auf seinen Namen und Rubys Benennungsregeln? –

Antwort

2

Ich konnte dies zum Laufen bringen, indem ich meine eigene Middleware schrieb, die einfach den Rails.logger zur Rack-Umgebung hinzufügt.

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

Wenn Sie bunkern, dass in lib/something/use_rails_logger.rb, dann können Sie es zu Ihrem Middleware-Stack hinzufügen und der Logger wird auf jeder Ebene zur Verfügung stehen, die nach ihm kommt.

Hinweis: Ich wollte es zu config/application.rb hinzufügen, da es keinen Grund gibt, diese Einstellung umgebungsabhängig zu machen, aber aus irgendeinem Grund würde require 'something/use_rails_logger' nicht von dieser Datei funktionieren. Hinzufügen zu config/environment/*.rb hat gut funktioniert. Neben dem require alles, was Sie brauchen, ist:

config.middleware.use Rack::UseRailsLogger 
Verwandte Themen