Dla następującego kodu:
logger.debug('message: {}'.format('test'))
pylint
generuje następujące ostrzeżenie:
interpolacja formatu logowania (W1202):
Użyj formatowania% w funkcjach rejestrowania i przekaż parametry% jako argumenty Używane, gdy instrukcja logowania ma postać wywołania „logging. (Format_string.format (format_args ...))”. Takie wywołania powinny zamiast tego używać formatowania%, ale pozostawić interpolację funkcji rejestrowania, przekazując parametry jako argumenty.
Wiem, że mogę wyłączyć to ostrzeżenie, ale chciałbym je zrozumieć. Założyłem, że używanie format()
jest preferowanym sposobem drukowania instrukcji w Pythonie 3. Dlaczego nie jest to prawdą w przypadku instrukcji rejestrujących?
źródło
.format()
stylu w którymś momencie, ponieważlogging
został ulepszony? Pytam, ponieważ bardziej interesuje mnie łatwość konserwacji niż niesamowita wydajność, przynajmniej w przypadku większości zadań.Może tym razem różnice pomogą Ci .
Poniższy opis nie jest odpowiedzią na Twoje pytanie, ale może pomóc ludziom.
Dla pylint 2.4: Istnieją 3 opcje zalogowaniu styl w
.pylintrc
pliku:old
,new
,fstr
fstr
opcja dodana w 2.4 i usunięta w 2.5Opis z
.pylintrc
pliku (v2.4):dla starego (
logging-format-style=old
):dla nowego (
logging-format-style=new
):Uwaga : można nie używać
.format()
nawet po wybraniunew
opcji.pylint nadal daje to samo ostrzeżenie dla tego kodu:
dla fstr (
logging-format-style=fstr
):Osobiście wolę opcję fstr ze względu na PEP-0498 .
źródło
"python.linting.pylintArgs": ["--logging-format-style=old"]
do pliku vscode / settings.json. docsoptparse.OptionValueError: option logging-format-style: invalid value: 'fstr', should be in ['old', 'new']
aktualizacja do najnowszej wersji pylint (2.4.4) naprawiła ten problem.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!
Z mojego doświadczenia wynika, że bardziej przekonującym powodem niż optymalizacja (w większości przypadków użycia) leniwej interpolacji jest to, że działa ona dobrze z agregatorami dzienników, takimi jak Sentry.
Rozważ komunikat dziennika „użytkownik zalogował się”. Jeśli interpolujesz użytkownika do ciągu formatu, masz tyle różnych komunikatów dziennika, ile jest użytkowników. Jeśli używasz tak leniwej interpolacji, agregator dziennika może rozsądniej zinterpretować to jako ten sam komunikat dziennika z wieloma różnymi wystąpieniami.
źródło