2014-03-06 11 views
5

So möchte ich vollständig benutzerdefinierte Protokollierung für meine sinatra Anwendung haben, aber ich kann nicht scheinen, die Rack::CommonLogger deaktivieren.Disable Rack :: CommonLogger ohne Affe Patching

Gemäß der sinatra docs alles was ich brauche sollte zu tun, ist die folgende Zeile hinzufügen (versucht, es zu false und Einstellung):

set :logging, nil 

meiner Konfiguration. Dies funktioniert jedoch nicht, und ich erhalte immer noch die Apache-ähnlichen Log-Nachrichten in meinem Terminal. Die einzige Lösung, die ich bisher gefunden habe, ist, das verdammte Ding mit einem Affen zu verarzten.

module Rack 
    class CommonLogger 
    def call(env) 
     # do nothing 
     @app.call(env) 
    end 
    end 
end 

Wer hat irgendwelche Ideen, wenn es möglich ist, dies zu deaktivieren, ohne zu solchen Angelegenheiten zu wiederholen?

+0

Sie verwenden 'Sinatra :: Application' oder 'Sinatra :: Base' für App? –

+0

Ich benutze 'Sinatra :: Base'. – nicohvi

+0

von doc '" Um zu verhindern, dass eine Logging-Middleware eingerichtet wird, setzen Sie die Logging-Einstellung auf Null. "' –

Antwort

4

Puma adds logging middleware zu Ihrer App, wenn Sie sich im Entwicklungsmodus befinden und die Option --quiet nicht aktiviert haben.

Um Puma Protokollierung in der Entwicklung zu stoppen, die -q oder --quiet Option auf der Kommandozeile übergeben:

puma -p 3001 -q 

oder wenn Sie eine Puma-Konfigurationsdatei verwenden, fügen Sie quiet zu.

+0

Sie, Sir, sind Ein Gelehrter und ein Gentleman. – nicohvi

4

Ich monkey die Log-Funktion (env, status, header, begin_at), die von Rack aufgerufen wird, um die Apache Style Logs zu erzeugen. Wir verwenden jruby mit Logback, so dass wir nicht die gesamte benutzerdefinierte Protokollierung verwenden, die das Ruby-Ökosystem durchdringt. Ich vermute, dass Fischfrau den CommonLogger initialisiert, was erklären könnte, warum alle meine Versuche, sie zu deaktivieren oder mit einem benutzerdefinierten Logger zu konfigurieren, scheitern. Wahrscheinlich macht Puma etwas Ähnliches. Ich hatte tatsächlich zwei Instanzen an einem Punkt. Eine Protokollierung mit meiner benutzerdefinierten Logger (Yay) und eine andere macht immer noch ihre doof puts-Anweisungen auf stderr. Ich muss sagen, ich bin ziemlich entsetzt über die Logging-Hacks im Rack-Ökosystem. Scheint jemand braucht eine große Ahnung an ihren Köpfen.

Wie auch immer, setzen diese in unserer config.ru arbeitet für uns:

module Rack 
    class CommonLogger 
    def log(env, status, header, began_at) 
     # make rack STFU; our logging middleware takes care of this  
    end 
    end 
end 

Zusätzlich zu, dass ich meine eigene Logging-Middleware schrieb die slf4j mit einem geeigneten MDC verwendet, so dass wir sinnvoller Anforderungsprotokollierung erhalten.

+0

Yay! Nach Stunden ist dies die einzige Methode, die funktioniert! – ColinM