2009-10-29 3 views
4

이상 로깅 모듈을 구성하는 것은 더 많은 기본 포맷을 갖도록 쉽게이다Python 2.3 로깅 메시지의 형식을 구성하는 방법은 무엇입니까? 파이썬 2.4

logging.basicConfig (레벨 = opts.LOGLEVEL 형식 = "% (메시지)들")

하지만 Python 2.3을 지원해야하는 응용 프로그램의 경우 Py2.4에서 로깅 API가 정밀 검사 되었기 때문에 더 어려워 보입니다. 특히, basicConfig는 인수를 취하지 않습니다.

try: 
    logging.basicConfig(level=opts.LOGLEVEL, format="%(message)s") 
except: 
    logging.getLogger().setLevel(opts.LOGLEVEL) 
    h = logging.StreamHandler() 
    h.setFormatter(logging.Formatter("%(message)s")) 
    logging.getLogger().addHandler(h) 

을하지만 Py2.3, 예를 들어,이 루트 로거를 호출하십시오 Py2.3 설명서의 유일한 예에 변화를 시도,이 얻을 나는 (위의 블록 "제외") Py2.3의 루트 로거의 기존 핸들러의 형식을 수정할 수있는 방법을 찾을 수 없습니다

Foo 
INFO:root:Foo 

:

logging.info("Foo") 

는 중복 출력을 제공 따라서 중복 출력을 생성하는 "addHandler"호출이 발생합니다. 이 중복없이 루트 로거의 형식을 설정하는 방법이 있습니까? 감사!

+0

'logging.getLogger(). handler '에는 무엇이 있습니까? 거기에 2 개의 핸들러가있는 것 같습니다. –

+0

Thanks Denis ... 정확히 내가 찾고 있던 것이지만, 문서에서'help()'함수를 통해)'handlers' 멤버를 찾지 못했습니다. 이를 통해 기존 핸들러를 수정할지 아니면 새 핸들러를 추가할지 여부를 선택할 수 있습니다. – andybuckley

답변

4

except: 예외 클래스없이 [es]는 문제가되는 좋은 방법입니다. 내가 믿는 logging 모듈은 파이썬 2.3에서 basicConfig() 함수를 가지고 있지만 옵션이 적다. **kwargs을 수락하기 때문에 어떤 일을 한 후에는 언제든지 실패 할 수 있습니다. 난 이미 기본 형식으로 처리기를 설치 한 다음 무언가를 구성하지 못한 것 같습니다. 예외를 잡은 후에 다른 핸들러를 설치했습니다. 2 명의 핸들러가 있으면 각 이벤트에 대해 2 개의 메시지를 받게됩니다. 가장 간단한 방법은 basicConfig()을 사용하지 않고 logging을 수동으로 구성하는 것입니다. 그리고 캐치 예외를 재현하거나 기록하지 않으면 except:을 사용하지 마십시오.

+0

팁과 원격 디버깅 모두에 감사드립니다. 나는 2.3이'basicConfig()'를 가지고 있다고 생각하지만, 전혀 args가 없다고 생각한다. 예외 처리에 관해서는 : 네, 나는 엉성함을 느낍니다. 바지 킥 주셔서 감사합니다;) – andybuckley

관련 문제