2009-12-31 2 views
55

나는이 같은 명령 줄 매개 변수를 사용하여 디버깅 할 로깅 모듈 설정 한 경우 : 로거를 DEBUG로 설정된 경우파이썬에서 루트 로거가 디버그 수준으로 설정되어 있는지 확인 하시겠습니까?

if (opt["log"] == "debug"): 
    logging.basicConfig(level=logging.DEBUG) 

가 어떻게 나중에 말할 수 있습니까? 나는 이 True 플래그가 전달되면 함수의 시간을 지정하고 플래그가 지정되지 않으면 루트 로거가 DEBUG로 설정된 경우 인쇄 타이밍 정보에 기본값 이 기본값으로 설정됩니다.

+0

[ "time_functions"] (다른 옵션에 따라 기본값은 True/False 일 수 있습니다). –

답변

69
logging.getLogger().getEffectiveLevel() 

인수없이 루트 수준 로거를 가져옵니다.

http://docs.python.org/library/logging.html#logging.Logger.getEffectiveLevel

+0

우수, 고마워! 나는 (getLogger에 명시 적 "루트"를 전달하는 것을 제외하고) 그런 식으로 일을하고 있었지만, 로거가 디버그되도록 설정되기 전에 내 데코레이터의 __init__ 함수에서 이것을 수행했다. \ –

+1

레벨의 이름을 원한다면 숫자를 사용하면 숫자를 문자열 (예 : '정보')로 변환 할 수 있습니다. logging.getLevelName() – guettli

57

사실, 더 나은 하나있다 : 코드 logging.getLogger().isEnabledFor(logging.DEBUG)를 사용합니다. 나는 getEffectiveLevel()의 결과로 무엇을해야하는지 이해하려고 노력하면서 그것을 발견했습니다. :-)

(아래 로깅 모듈 자체가 사용하는 코드의 이미지입니다.) 당신은 결국 같은 옵트로 대신 로거이 커플 링의 특정 무언가를 사용하는 것이 좋습니다

logging code

+0

런타임 복잡성이 낮아서 동일한 결과를 얻으므로이 값이 허용되는 대답이어야합니다. – AndyJost

관련 문제