PyLint 메시지: logging-format-interpolation
다음 코드의 경우:
logger.debug('message: {}'.format('test'))
pylint
츠키다
logging-format-interpolation (W1202) :
로깅 함수에서 % 형식을 사용하고 % 매개 변수를 인수로 전달합니다. 로깅 문의 호출 형식이 "logging."(format_string)인 경우 사용됩니다.포맷(format_params...)."이러한 콜에서는 대신 % 포맷을 사용해야 하지만 매개 변수를 인수로 전달하여 로깅 기능에 보간을 맡겨야 합니다.
이 경고를 끌 수 있다는 것을 알지만, 이해하고 싶습니다.나는 그것을 사용하는 것으로 생각했다.format()
Python 3 python python python 에에 python python python python python python python python python python 。문의 경우 은 왜 ?logger " " " " " " " " " " " " " " " " " " " 。
logger 문의 경우 logger 호출에 주어진 추가 인수를 사용하여 이 문자열의 느린 보간을 제공하기 위해 문자열과 같은 이전 "%" 형식에 의존하기 때문에 사실이 아닙니다.예를 들어 다음과 같은 작업을 수행하는 대신
logger.error('oops caused by %s' % exc)
해야 한다
logger.error('oops caused by %s', exc)
이 문자열은 메시지가 실제로 발신된 경우에만 삽입됩니다.
는 이 기능을 할 수 .format()
.
의 [Optimization]섹션에 따라logging
삭제:
메시지 인수 형식은 피할 수 없을 때까지 연기됩니다.단, 로깅 메서드에 전달되는 인수를 계산하는 것도 비용이 많이 들 수 있습니다.로거가 이벤트를 폐기할 경우 이 처리를 피하는 것이 좋습니다.
다음 설명은 당신의 질문에 대한 답은 아니지만 사람들에게 도움이 될 수 있습니다.
Interpolation을 사용하는 fstring(Literal String Interpolation)에서 ..pylintrc
disable=logging-fstring-interpolation
, 를 참조해 주세요.관련 문제 및 코멘트
, ,, 세, 세, 세, 세, 습, 습, 습, 습, also, also, also, also, also, alsologging-format-interpolation
.
pylint 2.4의 경우:
..pylintrc
일::old
,new
,fstr
fstr
옵션은 2.4에서 추가되어 2.5에서 삭제되었습니다.
명:의:.pylintrc
파일(v2.4):
[LOGGING]
# Format style used to check logging format string. `old` means using %
# formatting, `new` is for `{}` formatting,and `fstr` is for f-strings.
logging-format-style=old
(오래된 것)logging-format-style=old
foo = "bar"
self.logger.info("foo: %s", foo)
신규용(logging-format-style=new
foo = "bar"
self.logger.info("foo: {}", foo)
# OR
self.logger.info("foo: {foo}", foo=foo)
주의: 사용할 수 없습니다..format()
[ ]를 new
★★★★★★ 。
pylint는 여전히 이 코드에 대해 동일한 경고를 표시합니다.
self.logger.info("foo: {}".format(foo)) # W1202
# OR
self.logger.info("foo: {foo}".format(foo=foo)) # W1202
fstr (용)logging-format-style=fstr
foo = "bar"
self.logger.info(f"foo: {foo}")
개인적으로는 PEP-0498 때문에 fstr 옵션을 선호합니다.
지금까지의 경험으로 볼 때 보간 작업이 느리다는 것은 최적화(대부분의 사용 사례)보다 더 설득력 있는 이유는 Sentry와 같은 로그 애그리게이터와 잘 어울리기 때문입니다.
'사용자 로그인' 로그 메시지를 고려합니다.사용자를 형식 문자열에 삽입하면 사용자 수만큼 로그 메시지가 구분됩니다.이와 같이 느린 보간을 사용하면 로그 애그리게이터는 이를 여러 인스턴스가 포함된 동일한 로그 메시지로 보다 합리적으로 해석할 수 있습니다.
몇 년 후가 될 수도 있지만, 요전날 이 문제를 해결하기 위해 간단하게 했습니다.로거 앞에 스트링을 포맷했습니다.
message = 'message: {}'.format('test')
logger.debug(message)
이렇게 하면 로그에서 설정을 변경할 필요가 없으며 나중에 일반 인쇄로 변경하고자 할 때 포맷이나 코드를 변경할 필요가 없습니다.
언급URL : https://stackoverflow.com/questions/34619790/pylint-message-logging-format-interpolation
'programing' 카테고리의 다른 글
PHP에서 닫힘...정확히 무엇을 언제 사용할 필요가 있는가? (0) | 2023.01.15 |
---|---|
줄을 서야 한다." 결과 UnicodeDecodeError: 'utf-8' 코덱이 바이트를 디코딩할 수 없습니다. (0) | 2023.01.15 |
Java에서 문자열을 곱하여 시퀀스를 반복할 수 있습니까? (0) | 2023.01.15 |
WHERE 절에서 mysql concat()을 사용하고 있습니까? (0) | 2023.01.15 |
Matplotlib tight_layout()은 그림 suptitle을 고려하지 않습니다. (0) | 2023.01.15 |