문제

새로운 Python 스크립트에 대한 로깅 모듈을 설정했습니다.두 개의 핸들러가 있는데, 하나는 파일로 물건을 보내는 것이고, 하나는 이메일 경고용입니다.SMTPHandler는 ERROR 수준 이상의 항목을 메일로 보내도록 설정되어 있습니다.

SMTP 연결이 실패하지 않는 한 모든 것이 잘 작동합니다.SMTP 서버가 응답하지 않거나 인증이 실패하면(SMTP 인증 필요) 전체 스크립트가 종료됩니다.

저는 Python을 처음 접했기 때문에 이메일을 통해 로그 메시지를 보내는 문제로 인해 전체 스크립트가 중단되지 않도록 SMTPHandler가 발생하는 예외를 캡처하는 방법을 찾으려고 노력하고 있습니다.로그 파일에도 오류를 기록하고 있으므로 SMTP 경고가 실패하면 아무 것도 중단하지 않고 계속 진행하고 싶습니다.

"try:" 문이 필요한 경우에는 login.handlers.SMTPHandler 설정을 우회해야 합니까, 아니면 my_logger.error()에 대한 개별 호출을 우회해야 합니까?

도움이 되었습니까?

해결책

로깅 중에 발생하는 예외는 스크립트를 중지하지 않아야하지만 추적이 인쇄 될 수 있습니다. sys.stderr. 이 인쇄물을 방지하려면 다음을 수행하십시오.

logging.raiseExceptions = 0

이것은 기본값이 아닙니다 (개발 중에는 일반적으로 실패에 대해 알고 싶어하기 때문에). raiseExceptions 설정해서는 안됩니다.

당신은 그것을 찾아야합니다 SMTPHandler 다음에 오류 (또는 더 높은)가 기록 될 때 다시 연결을 시도합니다.

logging 하다 지나가 다 SystemExit 그리고 KeyboardInterrupt 예외이지만 다른 모든 것은 로깅을 사용하는 응용 프로그램의 종료를 유발하지 않도록 처리되어야합니다. 그렇지 않은 경우, 스크립트가 끝나고 종료되는 예외에 대한 구체적인 세부 정보와 Python/운영 체제의 버전에 대해 게시하십시오. 핸들러가 차단되는 네트워크 타임 아웃이있는 경우 스크립트가 매달려있는 것처럼 보일 수 있습니다 (예 : DNS 조회가 오랜 시간이 걸리거나 SMTP 연결에 오랜 시간이 걸리는 경우).

다른 팁

아마도 두 가지를 모두 수행해야 할 것입니다.이를 파악하려면 로컬 메일 서버를 설치하여 사용하는 것이 좋습니다.이렇게 하면 스크립트가 실행되는 동안 스크립트를 종료하고 오류 메시지를 기록할 수 있습니다.

코드를 유지 관리 가능하게 유지하려면 모든 로거 호출을 try-Exception으로 래핑하는 대신 단일 위치에서 예외를 처리할 수 있는 방식으로 SMTPHandler를 확장해야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top