장고 500 에러시 어드민 메일로 오류내용이 발송되지 않습니다.

소스코드내에서 logging.error("오류내용 출력") 과 같이 강제로 로그를 남길 경우에는 어드민 메일로 메일이 잘 발송됩니다. 다만 500 오류처럼 장고내에서 오류가 발생할 경우에는 파일로그만 생기고 이메일로는 전달이 되지 않는 현상이 있습니다.

로그를 강제로 출력할 경우 이메일이 잘 전달되는 것으로 봐서 설정에 문제가 있는 것 같지는 않구요..

로깅 설정은 다음과 같습니다.

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
        'require_debug_false': {
            '()': 'django.utils.log.RequireDebugFalse',
        },
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    ...
    'handlers': {
       ...
        'mail_admins': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'django.utils.log.AdminEmailHandler'
        },
        ...
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'mail_admins', 'file'],
            'level': 'INFO',
        },
        'django.server': {
            'handlers': ['django.server'],
            'level': 'INFO',
            'propagate': False,
        },
        'pybo': {
            'handlers': ['console', 'file', 'mail_admins'],
            'level': 'INFO',
        },
    }
}

도대체 무엇이 문제일까요?

박응용 469

M 2020년 7월 8일 1:40 오후

목록으로
1개의 답변이 있습니다. 1 / 1 Page

설정에 문제가 없었지만 500 에러시 다음처럼 urls.py 파일에 handler500 핸들러를 따로 구현한게 문제였습니다.

handler500 = 'common.views.common_views.server_error'

handler500 핸들러로 500 오류를 처리하게 될 경우 500 오류코드가 뭉개지는 현상이 발생할 수 있습니다.
그래서 다음처럼 response 함수의 매개변수 status에 500 오류코드를 함께 전달해야 합니다.

다음은 handler500 에 의해 실행되는 함수입니다.

def server_error(request):
    """
    500 Server Error
    """
    return render(request, 'common/500.html', {}, status=500)

status=500 을 설정하고 해결되었습니다.

박응용

M 2020년 7월 8일 3:30 오후