그래서 내가 유지하고있는 작은 내부 명령 줄 유틸리티에 로깅을 추가하려고합니다. (실제로 저는 파이썬의 logging
모듈을 사용하기 위해 수동으로 코딩 된 로깅을 추악하게 변환하고 있으며, 그 과정에서 어떤 사마귀도 정리하고 있습니다).Python : OptionParser에서 logging.setLevel verbosity를 사용하는 방법 type = 'count'?
먼저 기존 사용법, 사마귀 및 모든 것을 보존하고 싶습니다. 이미 발생하는 불필요한 경고에 의존하는 모든 스크립트는 내가하는 일의 결과로 중단되어서는 안됩니다. 새로운 기능은 스위치를 거치며 OptionParser에서 type=count
(고대 유닉스/리눅스 규칙에 따라)로 구현됩니다. 여기서 주름은 하나의 -v
이 자세한 정보를 -1에서 0으로 설정한다는 것입니다. 역설적으로 Paramiko 라이브러리에서 적어도 하나의 경고 메시지를 스퀠 핑합니다 (로거 "paramiko.transport"에 대해서는 수 없음). 여기에서 최대 4 개의 추가 -v
옵션을 지원하고 logging.setLevel()
의 옵션을 logging.CRITICAL
에서 logging.DEBUG
까지 점차 더 장황하게 사용하고 싶습니다.
문지르세요!
내가 쉽게 같은 것을 사용할 수 있습니다 : I 10의 배수에 -v
스위치 내 수를 변환 뺀거야 즉
if opts.verbosity == 0: # default is -1 do NOTHING
# 0 ironically makes it slightly quieter
logging.getLogger().addHandler(logging.NullHandler())
elif opts.verbosity > 0:
logging.basicConfig()
logging.getLogger().setLevel(50 - min(40, 10*opts.verbosity))
# UGLY BUT IT WORKS.
# logging.CRITICAL is 50,
# each -v reduces log filter by 10 down to 10
을 그 이상 자세한 아래로 가장 자세한쪽으로. (이것은 파이썬 2.7.x입니다.)
logging.basicConfig()
은 "핸들을 찾을 수 없습니다"라는 경고 메시지를 표시하지 않고이 유틸리티가 프로덕션 (수년) 동안 지속되는 동안 (무해하게) 발생한 몇 가지 기본 오류 메시지를 표시합니다. (그렇다면 처음에는 0으로 기본 설정을 시작했는데 예상대로 사용자에게 놀라운 소리가 들렸습니다.
하지만 제 질문은 더 적절한 "적절한"방법입니다. logging.setLevel()
로 설정 숫자 상세에서 번역?이 구현 세부 (logging.CRITICAL, logging.ERROR, logging.WARN,...
등과 관련된 숫자 값)를 사용하는 더러운 것 같다.
확실히 내가 파이썬의 표준 OptionParser
및 logging
모듈 -vvv
를 사용하여 하나가 될 수 없습니다 그러나 docs을 읽고 주위를 인터넷 검색하면 어떤 종류의 '우수 사례'도 발견되지 않았습니다.