programing

PyLint 메시지: logging-format-interpolation

bestcode 2023. 1. 15. 17:07
반응형

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)에서 ..pylintrcdisable=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

반응형