-
[Django] Custom Middleware를 이용해서 log 작성하기공부/Django 2023. 4. 26. 00:24
서비스를 운영하다보면 로그는 항상 확인이 필요하다.
그러나 매번 log를 요청하는 방법보다는 middleware로 관리를 하면 더 효율적일것이라고 생각을 하였다.
오늘은 해당 부분에 관련해서 글을 작성하려고 한다.
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
django로 서비스하는 경우 settings.py middleware에는 상단과 같이 작성이 돼 있다.
하단에 이미지를 보면 middleware의 작동 순서를 알 수 있다.
이처럼 middleware를 어떻게 선언하는가에 따라서 순차적으로 진행이 된다고 볼 수 있다.
출처: https://medium.com/scalereal/everything-you-need-to-know-about-middleware-in-django-2a3bd3853cd6 - HttpRequest Object는 Security 부터 XFrame 까지 실행하면서 view function에 도달 후 Response를 전달한다.
- middleware끼리는 의존도가 있는 것들이 있어서 순서가 중요하다. (Docs)
Middleware Custom
- class, function 두가지 방법으로 만들 수 있지만, 나는 function으로 만들었다.
- django project root경로에 custom.py 생성
# custom.py from django.conf import settings from config.settings.local import log def view_process_log_middleware(get_response): def middleware(request): response = get_response(request) log.info('%s%s %s'%(request.META.get('REQUEST_METHOD'),request.META.get('PATH_INFO'),response.content.decode('utf-8'))) return response return middleware # settings.py MIDDLEWARE = [ ..... 'config.custom.view_process_log_middleware', ..... ]
- middleware 시작 때부터 get_reponse 함수를 전달하면서 middleware를 타고 들어간다.
- get_response(request)를 호출하여 get_response를 사용하는 순간 다음 middleware를 가고, response가 정의 된 순간이 view 로직이 끝나고 해당 middleware를 작동한다고 보면된다.
- 내 로직에서는 log를 찍을 때 middleware를 통해서 찍고 싶었기 때문에 해당 방법으로 log를 찍을 수 있도록 구성하였다.
- 내가 작성한 코드와 설명보다 참고한 블로그가 더 상세하고 쉽게 설명 해준 거 같아서 링크를 남기며, 감사하다고 전하고 싶다.
- 어떤 문제를 해결하기 위해 검색하고 블로그에 작성한 글입니다. 부족한점이 많지만 틀린점이나 부족한점이 있다면 말씀해주시면 감사하겠습니다.
Ref.
https://velog.io/@qlgks1/Django-Middleware-custom-middleware-%EB%A7%8C%EB%93%A4%EA%B8%B0
Django Middleware - custom middleware 만들기
Django의 요청 / 응답 처리에 대한 후크 프레임 워크로써 Django 상의 모든 API 입출력을 전역적으로 변경하기 위한 플러그인 시스템. "Django의 입력 또는 출력을 전역적으로 변경하기 위한 가볍고 낮
velog.io
'공부 > Django' 카테고리의 다른 글
[Django] - AWS CloudWatch 사용시 로그가 2번 찍히는 이유 (0) 2023.05.27 [Django] Logging - 장고 로그(debug_sql) (0) 2023.04.14 [Django]Fernet을 사용한 양방향 암호화 (0) 2023.04.07 Django - CloudWatch : 장고 로깅을 CloudWatch에 입력하기 (0) 2023.04.05 Django - S3 - nginx - 이미지업로드, 정적파일 (0) 2023.03.07