2009-08-20 10 views
1

새로운 파이썬 스크립트를위한 로깅 모듈을 설정했습니다. 나는 두 개의 핸들러를 가지고 있는데, 하나는 파일로 보내고, 다른 하나는 이메일 알리미이다. SMTPHandler는 ERROR 레벨 이상의 메일을 보내도록 설정되어 있습니다.파이썬 로깅 SMTPHandler - 오프라인 SMTP 서버 처리

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

나는 python을 처음 사용하기 때문에 이메일을 통해 로그 메시지를 보내는 문제로 인해 전체 스크립트가 다운되지 않도록 SMTPHandler가 발생시키는 예외를 캡처하는 방법을 알아 내려고 노력 중입니다. 나는 또한 로그 파일에 오류를 쓰고 있기 때문에 SMTP 경고가 실패하면 계속 그냥 멈추고 싶다.

"try :"문이 필요한 경우 logging.handlers.SMTPHandler 설정을 둘러 볼 것인가, 아니면 my_logger.error()를 개별적으로 호출 할 것인가?

답변

4

로깅 중에 발생하는 예외로 인해 스크립트가 중지되지 않아야 추적 가능성이 sys.stderr으로 인쇄 될 수 있습니다. (개발은 일반적으로 실패에 대해 알고 싶기 때문에)

logging.raiseExceptions = 0 

이 기본이 아니라 생산, raiseExceptions가 설정되어서는 안 :이 출력을 방지하기 위해, 다음을 수행하십시오.

다음 번에 ERROR (이상)가 기록 될 때 SMTPHandler이 다시 연결을 시도합니다.

loggingSystemExitKeyboardInterrupt 예외 통해 패스를 수행하지만 로깅을 사용하는 응용 프로그램의 종료가 발생하지 않도록 다른 모든 처리해야한다. 그렇지 않은 경우, 스크립트가 종료되고 스크립트가 종료되도록하는 예외 사항과 Python/운영 체제 버전에 대한 세부 정보를 게시하십시오. 처리기가 차단되는 네트워크 시간 제한이있는 경우 (예 : DNS 조회에 시간이 오래 걸리는 경우 또는 SMTP 연결에 시간이 오래 걸리는 경우) 스크립트가 멈춘 것처럼 보일 수 있습니다.

+0

감사합니다. raiseExceptions 코드를 추가했습니다. 당신은 그것이 대본을 끝내지 않는 것이 옳다 ... 재시도가 그것이 그렇게 생각한 지연을 야기했다. –

0

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

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

+0

생산을 위해 로컬 SMTP 서버를 사용합니다. 서버가 dev에 대해 원격이므로 오류가 발생했습니다. –