2013-10-19 4 views
1

파이썬에는 두 가지 주요 문자열 포맷 옵션 %str.format이 있습니다. logging 모듈에 게으른 기능이 있습니다.왜 파이썬 로깅 모듈은 이전 문자열 포맷을 사용합니까?

logging.debug('The value is %s', huge_arg) 

로그 라인이 인쇄되지 않으면 문자열을 구성하지 않습니다. 그러나이 기능은 스팅이 이전 스타일 % 형식을 사용하는 경우에만 작동합니다. 이 게으른 기능과 함께 str.format을 사용할 수 있습니까? 아무도 새로운 포맷 기능을 지원하는 logging 코드를 변경하기 위해 자원 봉사 없다 - 지금까지 - 귀하의 질문에 대한 유일한 답이 있다는 것입니다

logging.debug('The value is {}', fmt_arg=(huge_arg)) 

답변

4

: 같은 명명 된 인수가있을 수 있습니다. 자원 봉사를하시는 분이라면 the Python-Dev mailing list에 대해 질문하지 않으시겠습니까? 귀하가 깨닫지 못한다면 (예 : logging 함수를 호출하여 이미 fmt_arg 키워드 인수를 전달한 것 같습니다.) 행운을 빌어 요 ;-)

1

내가 TimBot 모순 조금 무서워,하지만 난

:-) 다른 대답을이 때문에 로깅 모듈 % 서식을 사용의 모양 {} -formatting를 미리 날짜 파이썬에서는 (logging은 2.3에, str.format는 2.6).

  1. 당신은 단지 타사 라이브러리와 애플리케이션에서 기존 코드를 많이 파괴하지 않고 전환 할 수 없으므로 %의 -formatting은 여기에 있습니다 : 로깅이 때문에 -formatting} {까지 변환되지 않았습니다.
  2. {} 형식화가 완료되면 % 형식화 (AFAIK, 여전히 출력에 대한 제어 권한이 있지만 그래도 됨)가 느려졌으며 사람들은 로깅을 그대로 오버 헤드로 간주합니다. 그 오버 헤드 ;-)
  3. this post from 2010에 설명 된대로 이 이미 {} - 서식 지정 및 $ 스타일 서식 (string.Template)을 지원합니다. 설명 된 방법은 로깅의 지연 포맷을 지원합니다.
+1

일부 코드가 사용자 정의 클래스를 사용하지 않는 한 추가 키워드 인수가있는 경우 기존 코드가 손상되는 이유는 무엇입니까? '{}'이 느리면 게으른 로깅을 사용하는 것이 더 적절합니다. 링크를 가져 주셔서 감사합니다. – balki

+0

@ balki 아마 그렇지는 않지만 사람들이 코드에 대해 어떤 가정을하는지 결코 알 수 없습니다. 어쨌든 분명히 코드 경로를 복잡하게하고 코드를 추가하는 것은 기능상의 이점이 거의 없습니다. (링크 된 게시물에 설명 된대로 로깅을 사용하여 {} 형식을 사용할 수 있습니다.) 그리고 게으른 서식이 처음부터 있었지만 사람들은 가능한 한 낮은 로깅 오버 헤드를 원한다고 지적했습니다. –