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.
Wusste nicht, dass Sie Blöcke zum Logger übergeben können. Perfekt! – CuriousMind