Tengo el módulo de registro MemoryHandler configurado para poner en cola los errores y mensajes de error para el objetivo SMTPHandler. Lo que quiero es que se envíe un correo electrónico cuando los errores de proceso contengan todas las declaraciones de depuración hasta ese momento (uno por línea). Lo que recibo en su lugar es un correo electrónico por separado para cada mensaje de depuración.Clasificar salida en el registro de Python MemoryHandler con SMTPHandler
Esta parece que debería ser trivial, y parte del paquete de registro, pero no puedo encontrar nada al respecto, no hay ejemplos, nada en Google.
log = logging.getLogger()
log.setLevel(logging.DEBUG)
debug_format = logging.Formatter("%(levelname)s at %(asctime)s in %(filename)s (line %(lineno)d):: %(message)s")
# write errors to email
error_mail_subject = "ERROR: Script error in %s on %s" % (sys.argv[0], os.uname()[1])
error_mail_handler = logging.handlers.SMTPHandler(SMTP_HOST, '[email protected]'+os.uname()[1], [LOG_EMAIL], error_mail_subject)
error_mail_handler.setLevel(logging.ERROR)
#error_mail_handler.setLevel(logging.DEBUG)
error_mail_handler.setFormatter(debug_format)
# buffer debug messages so they can be sent with error emails
memory_handler = logging.handlers.MemoryHandler(1024*10, logging.ERROR, error_mail_handler)
memory_handler.setLevel(logging.DEBUG)
# attach handlers
log.addHandler(memory_handler)
log.addHandler(error_mail_handler)
relación a esto:
¿Es necesario añadir el error_mail_handler
al registrador de forma explícita si se trata de un objetivo de memory_handler
de todos modos? ¿Debe error_mail_handler
establecerse en el objetivo DEBUG o ERROR? ¿Necesita siquiera un objetivo cuando se lo alimenta desde el memory_handler
?
Me encantaría ver algún código de trabajo de cualquiera que haya resuelto este problema.
Great stuff. ¡No es todos los días que el autor del módulo responde tu pregunta! – SpliFF
@VinaySajip: ¿qué opina sobre el uso del módulo smtplib para enviar correos electrónicos? – codingknob
@ algotr8der - Puede ver en el enlace (ahora actualizado) que el script realmente usa 'smtplib' para enviar los correos electrónicos. –