2013-05-14 9 views
7

Rails wird zusammen mit Rubys logger Klasse in der Standardbibliothek geliefert. Die verfügbaren Protokollebenen sind: :debug, :info, :warn, :error und :fatal.Bei Rails anmelden, gibt es Leistungseinbußen?

Ich habe mich gefragt, ob ich umfangreiche Protokollierung in meiner Rails-Anwendung mit Log-Level :debug für die Entwicklung und Tests hinzufügen, wird es Auswirkungen auf die Leistung in der Produktion mit Protokollierung ausgeschaltet oder auf höherer Ebene, wie config.log_level = :fatal?

Antwort

17

Die kurze Antwort ist, dass die Protokollierung immer eine Auswirkung auf die Leistung hat, besonders beim Logging auf die Festplatte. Es gibt jedoch ein paar Feinheiten.

Erstens wird die Verwendung der :debug Ebene eine größere Leistungseinbuße als :fatal haben, da eine weitaus größere Anzahl von Zeichenfolgen ausgewertet und in die Protokollausgabe geschrieben wird (z. B. Datenträger).

Eine weitere potentielle Gefahr besteht darin, dass, wenn Sie in Ihrem Code viele Anrufe wie diese haben:

logger.debug = "my string to debug with a #{variable}" 

Es wird eine Auswirkung auf der Leistung sein, auch wenn die zulässigen Ausgangspegel nicht Debug enthalten. Der Grund ist, dass Ruby diese Strings evaluieren muss, was beinhaltet, dass das etwas schwere String Objekt instanziiert und die Variablen interpoliert werden, und das braucht Zeit.

Daher ist es empfohlen Blöcke an den Logger Methoden passieren, da diese nur dann ausgewertet, wenn der Ausgangspegel gleich ist oder in dem zulässigen Niveau enthielt (d.h. träges Laden). Der gleiche Code neu geschrieben wäre:

logger.debug { "my string to debug with a #{variable}" } 

Der Inhalt des Blocks und damit die String-Interpolation wird nur ausgewertet, wenn debug aktiviert ist. Diese Leistungseinsparung ist nur bei großen Mengen von Protokollierung wahrnehmbar, aber es ist eine gute Praxis, sie zu verwenden.

Sie können mehr darüber in der Logger docs lesen.

+1

Wusste nicht, dass Sie Blöcke zum Logger übergeben können. Perfekt! – CuriousMind

Verwandte Themen