Problem
http 500 서버 에러 발생 시의 처리 로직을 구현.
Solution
이미 구현되어 있는 django.conf.urls.handler500 을 이용한다.
django.conf.urls.handler500 에 view의 함수를 지정해주고, view에서 에러 관련 처리를 해준다.
*urls.py*
import django.conf.urls
django.conf.urls.handler500 = "apps.views.error500"
필자는 에러 정보를 slack bot을 통해 송신한 다음 에러 페이지를 출력하는 로직을 구현하였다.
발생한 에러는 traceback.format_exc()를 사용해 저장하면 된다.
err_str = traceback.format_exc()
*views.py*
def error500(request):
username = request.session.get("username", "unknown")
cur_time = timezone.now()
cur_time = cur_time + timezone.timedelta(hours=9)
cur_time = cur_time.strftime(CONST.CURTIME_FORM)
setting_value = str(settings).split('"')[-2] # settings 값을 문자열로 읽어옴
target = setting_value.split(".")[-1] # settings 파일
err_str = traceback.format_exc()
msg = "===========================================================================\n"
msg += f"*[{target} server 에러 발생]*\n>*유저*: {username}\n>*발생 일시*: {cur_time}\n\n*에러 코드*```{err_str}```\n"
data = {
'token': slack_token,
'channel': CONST.SLACK_CHANNEL,
'as_user': True,
'text': msg,
}
requests.post(url='https://slack.com/api/chat.postMessage', data=data)
return render(request, '500.html', status=500)
'Django' 카테고리의 다른 글
[Django] Function Based View 환경에서 Swagger 사용하기 (0) | 2022.04.28 |
---|---|
[Django API] Django + JWT (0) | 2022.04.26 |
[Django] Debug=False 설정 시 static 이 깨지는 오류 (0) | 2021.12.27 |
[Django] settings 파일 (0) | 2021.12.22 |
[Django] request header 읽기 (0) | 2021.12.22 |