Послать сообщение об ошибке на почту из django management commands
22 февраля 2019 г. 7:56
По умолчанию вы не сможете получать сообщение об ошибках, если management-команда выполняется через cron. Но это легко исправить: достаточно добавить в settings.py дополнительный logger:
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
# other loggers
'management_commands': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
}
}
}
А в manage.py обернуть команду execute_from_command_line(sys.argv) исключением Exception, например так:
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
from django.core.management import execute_from_command_line
from logging import getLogger
import traceback
logger = getLogger('management_commands')
try:
execute_from_command_line(sys.argv)
except Exception as e:
logger.error('Admin Command Error: %s', ' '.join(sys.argv), exc_info=sys.exc_info())
sys.stderr.write(traceback.format_exc().decode('utf-8'))
Теперь при вызове management-команды из командной строки или через cron будет показываться и трейсбек ошибки, и посылаться на почту сообщение об ошибке.
Представляю вашему вниманию книгу, написанную моим близким другом Максимом Макуриным: Секреты эффективного управления ассортиментом.
Книга предназначается для широкого круга читателей и, по мнению автора, будет полезна специалистам отдела закупок и логистики, категорийным и финансовым менеджерам, менеджерам по продажам, аналитикам, руководителям и директорам, в компетенции которых принятие решений по управлению ассортиментом.
Комментарии: 0