Послать сообщение об ошибке на почту из 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