문제

내 앱의 전체 벌목 시설을 통일하고 싶습니다. 모든 경고는 예외를 제기하는 것입니다. 다음은 잡아서 로거로 전달합니다. 그러나 질문 : 음소거 시설을 기록하고 있습니까? 때때로 로거는 너무 장황 해집니다. 때로는 너무 시끄러운 경고의 이유 때문에 경고에는 장황한 한계가 있습니까?

http://docs.python.org/library/logging.html

http://docs.python.org/library/warnings.html

도움이 되었습니까?

해결책

거기뿐만 아니라 로그 레벨, 그러나 정말 유연한 것이 있습니다 그들을 구성하는 방법. 이름을 사용하는 경우 logger 물체 (예 : logger = logging.getLogger(...)) 그런 다음 적절하게 구성 할 수 있습니다. 이를 통해 서브 시스템 별 하위 시스템 기준으로 Verbosity를 구성 할 수 있습니다. 하위 시스템 로깅 계층 구조로 정의됩니다.

다른 옵션은 사용하는 것입니다 logging.Filter 그리고 경고 필터 출력을 제한합니다. 나는 전에이 방법을 사용하지 않았지만 당신의 요구에 더 잘 맞는 것처럼 보입니다.

주다 PEP-282 파이썬에 대한 좋은 산문 설명을위한 읽기 logging 패키지. 모듈 문서보다 기능이 훨씬 더 잘 설명된다고 생각합니다.

설명 후 편집

당신은 logging.Logger 및 등록 logging.setLoggerClass(). Syslog의 것과 비슷한 것을 원한 것 같습니다. "마지막 메시지는 9 번 반복되었습니다". 불행히도 나는 어디서나 이것의 구현을 모른다. 당신은 있는지보고 싶을 수도 있습니다 Twisted.python.log 이 기능을 지원합니다.

다른 팁

당신이 언급 한 바로 그 출처에서. 로그 레벨이 있습니다. 현명하게 사용하십시오 ;-)

LEVELS = {'debug': logging.DEBUG,
          'info': logging.INFO,
          'warning': logging.WARNING,
          'error': logging.ERROR,
          'critical': logging.CRITICAL}

오류를 제기 한 코드에 대해 아무것도 모르는 블라인드 오류 핸들러에서 모든 로깅 호출을 할 계획이라면 문제가됩니다. 어떤 로깅 통화가 이루어지고 그렇지 않은지 어떻게 결정 하시겠습니까?

보다 표준적인 관행은 그러한 블록을 사용하여 가능한 경우 복구하고 오류를 기록하는 것입니다 (실제로는 준비되지 않은 오류 인 경우, 이에 대해 알고 싶어합니다. 높은 수준을 사용하십시오). 그러나 모든 주/디버그 정보에 대해이 블록에 의존하지 마십시오. 오류 처리기에 도달하기 전에 로깅 통화로 코드를 뿌리는 것이 좋습니다. 이렇게하면 시스템이 실패하지 않을 때 시스템에 대한 유용한 런타임 정보를 관찰 할 수 있으며 심각도가 다른 로그 호출을 할 수 있습니다. 예를 들어:

import logging
from traceback import format_exc
logger = logging.getLogger() # Gives the root logger.  Change this for better organization
# Add your appenders or what have you
def handle_error(e):
    logger.error("Unexpected error found")
    logger.warn(format_exc()) #put the traceback in the log at lower level
    ... #Your recovery code
def do_stuff():
    logger.info("Program started")
    ... #Your main code
    logger.info("Stuff done")
if __name__ == "__main__":
    try:
        do_stuff()
    except Exception,e:
        handle_error(e)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top