Für den folgenden Code:
logger.debug('message: {}'.format('test'))
pylint
erzeugt die folgende Warnung:
Protokollierungsformat-Interpolation (W1202):
Verwenden Sie die% -Formatierung in Protokollierungsfunktionen und übergeben Sie die% -Parameter als Argumente. Wird verwendet, wenn eine Protokollierungsanweisung die Aufrufform "Protokollierung. (Format_string.format (format_args ...))" hat. Solche Aufrufe sollten stattdessen die% -Formatierung verwenden, aber die Interpolation der Protokollierungsfunktion überlassen, indem die Parameter als Argumente übergeben werden.
Ich weiß, dass ich diese Warnung ausschalten kann, aber ich würde sie gerne verstehen. Ich nahm an, dass die Verwendung format()
der bevorzugten Methode zum Ausdrucken von Anweisungen in Python 3 ist. Warum gilt dies nicht für Logger-Anweisungen?
quelle
.format()
Stil zu wechseln, weil erlogging
aktualisiert wurde? Ich frage, weil ich mehr an Wartbarkeit interessiert bin als an der neuesten Geschwindigkeitsleistung, zumindest für die meisten Aufgaben.Vielleicht können Ihnen diesmal Zeitunterschiede helfen.
Die folgende Beschreibung ist nicht die Antwort auf Ihre Frage, kann aber Menschen helfen.
Für Pylint 2.4: Es gibt drei Optionen für Stil in der Logging -
.pylintrc
Datei:old
,new
,fstr
fstr
Option in 2.4 hinzugefügt und in 2.5 entferntBeschreibung aus
.pylintrc
Datei (v2.4):für alt (
logging-format-style=old
):für new (
logging-format-style=new
):Hinweis : Sie können nicht verwenden,
.format()
auch wenn Sie auswählennew
Option .pylint gibt immer noch die gleiche Warnung für diesen Code aus:
für fstr (
logging-format-style=fstr
):Persönlich bevorzuge ich die Option fstr wegen PEP-0498 .
quelle
"python.linting.pylintArgs": ["--logging-format-style=old"]
der Datei vscode / settings.json hinzufügen . docsoptparse.OptionValueError: option logging-format-style: invalid value: 'fstr', should be in ['old', 'new']
Upgrade auf das neueste pylint (2.4.4) hat dies behoben.Try installing a more recent version of python-pylint, and please open a bug report if the issue persists in t\ he latest release. Thanks!
Nach meiner Erfahrung ist ein überzeugenderer Grund als die Optimierung (für die meisten Anwendungsfälle) für die verzögerte Interpolation, dass sie gut mit Protokollaggregatoren wie Sentry funktioniert.
Betrachten Sie eine Protokollmeldung "Benutzer angemeldet". Wenn Sie den Benutzer in die Formatzeichenfolge interpolieren, haben Sie so viele unterschiedliche Protokollnachrichten, wie Benutzer vorhanden sind. Wenn Sie eine verzögerte Interpolation wie diese verwenden, kann der Protokollaggregator dies vernünftigerweise als dieselbe Protokollnachricht mit einer Reihe verschiedener Instanzen interpretieren.
quelle