Python - Logger-string-Formatierung
Wie ich es verstehe,
'hello {0}'.format("world")
ist langsamer als:
"hello %s" % "world"
Meine Frage ist, wie logger-format die Saiten, wenn übergeben, etwa so:
logger.debug("hello %s", "world")
Und unter der Annahme der Protokolle wird nie abgeschaltet werden, wäre es besser zu tun:
logger.debug("hello %s" % "world")
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vergessen Sie nicht, dass, wenn Sie am Ende mit einem logging-aggregation-service, wie Sentry, dann werden alle Anrufe an:
zusammen gruppiert, da mehrere vorkommen des gleichen Fehlers, während alle Anrufe an:
wird aufgelistet, wie viele unterschiedliche Fehler, von denen jede einmal passiert. Dies kann machen es schwer zu selektieren, die Fehler sind tatsächlich häufiger Auftritt.
Diese Gruppierung Verhalten basierend auf dem Wert des ersten Parameters, um die Protokollierung von anrufen. Im ersten Beispiel, Sie sind alle identisch, während in der zweiten, Sie alle hängen von der Wert von 'planet'.
So ist es wichtig, nicht zu verwenden Sie das ' % ' - oder .format-Operatoren auf strings übergeben Sie die Anmeldung. Lassen Sie die Protokollierung nennen, die es für Sie tun.
logger.debug(msg, arg1, arg2)
hat intern:msg = msg % (arg1, arg2)
als dokumentiert also keine überraschung hier.logger.debug(msg, arg1, arg2, ...)
Aussehen könnte aufgeräumter alslogger.debug(msg % (arg1, arg2, ...))
und nicht die Formatierung durchführen vorzeitig.Einen Unterschied wird vernachlässigbar sein. Der Zeitaufwand, den der logger nimmt beeinflusst werden überwiegend von, wie schnell Ihr Ausgang Kanal - und IO ist immer langsam. Der Unterschied zwischen logger mit
%
im Vergleich zu.format
wird etwa eine halbe Mikrosekunde pro string. Der logger wird im Durchschnitt verbringen ein bisschen mehr Zeit - vielleicht einige Sekunden - eigentlich Protokollierung jede Zeichenfolge.