# from __future__ import absolute_import, unicode_literals from celery import Task from celery import shared_task import logging from django.conf import settings from server.settings import SYSCONF # 实例化myLogger myLogger = logging.getLogger('log') @shared_task def send_mail_task(**args): if settings.DEBUG is False: from django.core.mail import send_mail args['subject'] = '{}:{}_{}_{}'.format(settings.SYS_NAME, settings.SYS_VERSION, SYSCONF['base']['base_name_short'], args.get('subject', '500')) args['from_email'] = args.get('from_email', settings.EMAIL_HOST_USER) args['recipient_list'] = args.get('recipient_list', [settings.EMAIL_HOST_USER]) send_mail(**args) class CustomTask(Task): """ 自定义的任务回调 """ def on_failure(self, exc, task_id, args, kwargs, einfo): if settings.DEBUG is False: detail = '{0!r} failed: {1!r}'.format(task_id, exc) myLogger.error(detail) send_mail_task.delay(subject='task_error', message=detail) return super().on_failure(exc, task_id, args, kwargs, einfo)