Pergunta

Eu tenho a configuração do módulo de registro para o meu script novo python. Eu tenho dois manipuladores, um envio de material para um arquivo, e um para alertas de email. O SMTPHandler está configurado para correio de qualquer coisa no nível de erro ou acima.

Tudo funciona muito bem, a menos que a conexão SMTP falha. Se o servidor SMTP não responder ou autenticação falha (que exige autenticação SMTP), então as matrizes todo script.

Eu sou bastante novo para python, por isso estou tentando descobrir como capturar a exceção de que o SMTPHandler está aumentando de modo que quaisquer problemas para enviar a mensagem de log por e-mail não vai derrubar todo o meu script. Desde que eu também estou escrevendo erros para um arquivo de log, se o alerta SMTP falhar, eu só quero continuar, não parar nada.

Se eu precisar de uma "tente:" declaração, seria ir ao redor da instalação logging.handlers.SMTPHandler, ou em torno das chamadas individuais para my_logger.error ()

?
Foi útil?

Solução

As exceções que ocorrem durante o registro não deve interromper o roteiro, embora possam causar um rastreamento a ser impresso para sys.stderr. A fim de evitar esta impressão, faça o seguinte:

logging.raiseExceptions = 0

Este não é o padrão (porque em desenvolvimento normalmente você quer saber sobre falhas), mas na produção, raiseExceptions não deve ser definido.

Você deve achar que o SMTPHandler tentará uma re-conexão da próxima vez que um erro (ou superior) é registrado.

logging faz passar por SystemExit e KeyboardInterrupt exceções, mas todos os outros devem ser tratadas de modo que eles não causam interrupção de uma aplicação que utiliza o log. Se você achar que este não é o caso, por favor pós detalhes específicos das exceções que estão recebendo através de e causando o seu script para terminar, e sobre a sua versão do sistema Python / funcionamento. Tenha em mente que o roteiro pode parecer travar se houver um tempo limite de rede que está causando o manipulador para o bloco (por exemplo, se uma pesquisa de DNS leva um longo tempo, ou se a conexão SMTP leva muito tempo).

Outras dicas

Você provavelmente precisará fazer as duas coisas. Para descobrir isso, eu sugiro instalar um servidor de correio local e usar isso. Dessa forma, você pode desligá-lo enquanto as corridas de script e anote a mensagem de erro.

Para manter a fácil manutenção de código, você deve se estende SMTPHandler de tal forma que você pode lidar com as exceções em um único lugar (em vez de envolver cada chamada logger com try-excepto).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top