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