setting.py
LOGGING = {
#OTHER OPTIONS
'filters': {
#OTHER FILTERS
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
#OTHER HANDLERS
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler',
'include_html': True
}
},
'loggers': {
#OTHER LOGGERS
'management_commands': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
}
}
command
from django.utils.log import getLogger
from django.core.management.base import BaseCommand
import sys
logger = getLogger('management_commands')
class Command(BaseCommand):
def handle(self, *args, **options):
try:
#DO YOUR STUFF HERE
except Exception as e:
logger.error('Admin Command Error: %s', ' '.join(sys.argv), exc_info=sys.exc_info())
#Raise the exception again so it gets logged in standard error also.
raise e
参考:https://mpcabd.xyz/make-django-management-commands-send-errors-email-admins/