Pregunta

He fijado el módulo de registro para mi nuevo script en Python. Tengo dos controladores, uno el envío de material a un archivo, y otro para alertas de correo electrónico. El SMTPHandler está configurado para enviar por correo cualquier cosa en el nivel de error o superior.

Todo funciona muy bien, a menos que la conexión SMTP falla. Si el servidor SMTP no responde o falla la autenticación (que requiere autenticación SMTP), entonces todo el guión muere.

Soy bastante nuevo en Python, por lo que estoy tratando de encontrar la manera de capturar la excepción de que el SMTPHandler está levantando para que cualquier problema que envían el mensaje de registro a través de correo electrónico no será derribar todo mi guión. Debido a que también escribo errores a un archivo de registro, si falla la alerta SMTP, sólo quiero seguir adelante, no detener nada.

Si necesito un "tratar"? Declaración, tendría que ir alrededor de la configuración logging.handlers.SMTPHandler, o alrededor de las llamadas individuales a my_logger.error ()

¿Fue útil?

Solución

Las excepciones que se producen durante el registro no debe parar su escritura, aunque pueden causar un rastreo que se imprimen en sys.stderr. Con el fin de evitar que esta impresión, haga lo siguiente:

logging.raiseExceptions = 0

Este no es el valor por defecto (ya que en el desarrollo que normalmente quiere saber acerca de los errores), pero en la producción, raiseExceptions no debe ser establecido.

Usted debe encontrar que el SMTPHandler intentará una re-conexión de la próxima vez que un error (o superior) se registra.

logging hace y pasan a través de SystemExit KeyboardInterrupt excepciones, pero todos los demás deben ser manejados de manera que no causen la terminación de una aplicación que utiliza el registro. Si encuentra que este no es el caso, por favor, puesto detalles específicos de las excepciones que están recibiendo a través y la causa de su secuencia de comandos para terminar, y sobre su versión de sistema / operativo Python. Tenga en cuenta que el guión puede parecer que se bloquee si hay un tiempo de espera de la red que está causando el manejador para bloquear (por ejemplo, si una búsqueda de DNS tarda mucho tiempo, o si la conexión SMTP tarda mucho tiempo).

Otros consejos

Es probable que tenga que hacer ambas cosas. Para resolver esto, sugiero para instalar un servidor de correo local y usar eso. De esta manera, puede apagarlo, mientras que la secuencia de comandos se ejecuta y anotar el mensaje de error.

Para mantener el mantenible código, debería extiende SMTPHandler de tal manera que puede manejar las excepciones en un solo lugar (en lugar de envolver cada llamada registrador con try-excepto).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top