>  기사  >  백엔드 개발  >  로깅 모듈을 사용하여 Python에서 처리되지 않은 예외를 어떻게 기록할 수 있습니까?

로깅 모듈을 사용하여 Python에서 처리되지 않은 예외를 어떻게 기록할 수 있습니까?

Barbara Streisand
Barbara Streisand원래의
2024-10-23 00:10:03753검색

How Can I Log Unhandled Exceptions in Python Using the Logging Module?

Python에서 포착되지 않은 예외 기록

명시적으로 처리하지 않는 한 Python 예외는 기본적으로 프로그램의 표준 오류 스트림(stderr)으로 출력됩니다. 그러나 포착되지 않은 예외를 대신 로깅 모듈을 사용하여 기록하는 것이 바람직한 경우가 있을 수 있습니다.

잡히지 않은 예외를 기록하는 전통적인 접근 방식은 Except 블록 내에서 login.Exception(e) 메서드를 수동으로 사용하는 것입니다. , 아래에 설명된 대로:

<code class="python">try:
    raise Exception, 'Throwing a boring exception'
except Exception, e:
    logging.exception(e)</code>

그러나 포착되지 않은 모든 예외에 대해 자동으로 login.Exception(...)을 호출하면 수동 단계가 제거됩니다.

구현

다음을 고려하세요. 다음 코드 조각:

<code class="python">import sys
import logging

# Custom logger with handler for stdout
logger = logging.getLogger(__name__)
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

# Custom exception handler to log uncaught exceptions
def handle_exception(exc_type, exc_value, exc_traceback):
    # Ignore KeyboardInterrupt for Ctrl + C exit
    if issubclass(exc_type, KeyboardInterrupt):
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return

    logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

# Assign custom exception handler
sys.excepthook = handle_exception

if __name__ == "__main__":
    raise RuntimeError("Test unhandled")</code>

이 수정된 스크립트는 여러 주요 작업을 수행합니다.

  • 사용자 정의 로깅: 로깅 모듈을 활용하여 포착되지 않은 예외의 형식을 지정하고 기록합니다.
  • 표준 출력 처리: 사용자 정의 처리기를 사용하여 예외를 stdout으로 전달하여 콘솔 창에 표시되도록 합니다.
  • 선택적 예외 처리: Ctrl C를 통해 정상적인 콘솔 종료를 유지하기 위해 KeyboardInterrupt 예외를 무시합니다.

기본 예외 핸들러를 handler_Exception으로 재정의하면 포착되지 않은 예외가 구성된 로거를 사용하여 자동으로 기록되므로 가시성이 향상되고 디버깅이 용이해집니다.

위 내용은 로깅 모듈을 사용하여 Python에서 처리되지 않은 예외를 어떻게 기록할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.