Pour le code suivant:
logger.debug('message: {}'.format('test'))
pylint
produit l'avertissement suivant:
interpolation-format-de-journalisation (W1202):
Utilisez le formatage% dans les fonctions de journalisation et transmettez les paramètres% en tant qu'arguments Utilisé lorsqu'une instruction de journalisation a une forme d'appel de «journalisation. (Format_string.format (format_args ...))». De tels appels devraient utiliser le formatage% à la place, mais laisser l'interpolation à la fonction de journalisation en passant les paramètres comme arguments.
Je sais que je peux désactiver cet avertissement, mais j'aimerais le comprendre. J'ai supposé que l'utilisation format()
était la meilleure façon d'imprimer des instructions en Python 3. Pourquoi n'est-ce pas vrai pour les instructions de journalisation?
la source
.format()
style à un moment donné parce qu'illogging
a été mis à niveau? Je demande parce que je suis plus intéressé par la maintenabilité que par les performances de vitesse de pointe, du moins pour la plupart des tâches.Peut-être que cette différence de temps peut vous aider.
La description suivante n'est pas la réponse à votre question, mais elle peut aider les gens.
Pour pylint 2.4: Il y a 3 options pour le style journalisation dans le
.pylintrc
fichier:old
,new
,fstr
fstr
option ajoutée en 2.4 et supprimée en 2.5Description du
.pylintrc
fichier (v2.4):pour l' ancien (
logging-format-style=old
):pour nouveau (
logging-format-style=new
):Remarque : vous ne pouvez pas utiliser
.format()
même si vous sélectionneznew
option.pylint donne toujours le même avertissement pour ce code:
pour fstr (
logging-format-style=fstr
):Personnellement, je préfère l'option fstr à cause de PEP-0498 .
la source
"python.linting.pylintArgs": ["--logging-format-style=old"]
au fichier vscode / settings.json. docsoptparse.OptionValueError: option logging-format-style: invalid value: 'fstr', should be in ['old', 'new']
mise à niveau vers le dernier pylint (2.4.4) a corrigé ce problème.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!
D'après mon expérience, une raison plus convaincante que l'optimisation (pour la plupart des cas d'utilisation) de l'interpolation paresseuse est qu'elle joue bien avec les agrégateurs de journaux comme Sentry.
Considérez un message de journal «utilisateur connecté». Si vous interpolez l'utilisateur dans la chaîne de format, vous avez autant de messages de journal distincts que d'utilisateurs. Si vous utilisez une interpolation paresseuse comme celle-ci, l'agrégateur de journaux peut plus raisonnablement interpréter cela comme le même message de journal avec un tas d'instances différentes.
la source