Para o seguinte código:
logger.debug('message: {}'.format('test'))
pylint
produz o seguinte aviso:
interpolação de formato de log (W1202):
Use a formatação% nas funções de log e passe os parâmetros% como argumentos Utilizados quando uma instrução de log possui um formulário de chamada de “log. (Format_string.format (format_args ...))”. Essas chamadas devem usar% de formatação, mas deixar a interpolação para a função de log passando os parâmetros como argumentos.
Sei que posso desativar esse aviso, mas gostaria de entendê-lo. Eu assumi que usar format()
é a maneira preferida de imprimir instruções no Python 3. Por que isso não é verdade para instruções do logger?
fonte
.format()
estilo em algum momento porquelogging
foi atualizado? Pergunto porque estou mais interessado em manutenção do que em desempenho de velocidade de ponta, pelo menos na maioria das tarefas.Talvez desta vez as diferenças possam ajudá-lo.
A descrição a seguir não é a resposta para sua pergunta, mas pode ajudar as pessoas.
Para pylint 2.4: Existem 3 opções para login estilo no
.pylintrc
arquivo:old
,new
,fstr
fstr
opção adicionada em 2.4 e removida em 2.5Descrição do
.pylintrc
arquivo (v2.4):para old (
logging-format-style=old
):para new (
logging-format-style=new
):Nota : você não pode usar,
.format()
mesmo se você selecionar anew
opção.O pylint ainda dá o mesmo aviso para este código:
para fstr (
logging-format-style=fstr
):Pessoalmente, prefiro a opção fstr por causa do PEP-0498 .
fonte
"python.linting.pylintArgs": ["--logging-format-style=old"]
ao arquivo vscode / settings.json. docsoptparse.OptionValueError: option logging-format-style: invalid value: 'fstr', should be in ['old', 'new']
atualização para o pylint mais recente (2.4.4) corrigiu isso.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!
Na minha experiência, uma razão mais convincente do que a otimização (na maioria dos casos de uso) para a interpolação lenta é que ela funciona muito bem com agregadores de logs como o Sentry.
Considere uma mensagem de log 'usuário logado'. Se você interpolar o usuário na cadeia de formatação, você terá tantas mensagens de log distintas quanto os usuários. Se você usar uma interpolação lenta como essa, o agregador de log poderá interpretar isso mais razoavelmente como a mesma mensagem de log com várias instâncias diferentes.
fonte