[Python] how to log request id in django middleware?

Discussão em 'Python' iniciado por Stack, Janeiro 19, 2025.

  1. Stack

    Stack Membro Participativo

    I write some code as below,but it raise an exception

    here is request_id_middleware.py

    import uuid

    from django.middleware.common import CommonMiddleware
    from taiji.logger import logger

    class RequestIDMiddleware(CommonMiddleware):
    # pass
    def process_request(self, request):
    request.META['request_id'] = str(uuid.uuid4())
    logger.info(f"start request id: {request.META['request_id']}")
    return request

    def process_response(self, request, response):
    if request.META.get('request_id') is None:
    response.headers['X-REQUEST-ID'] = request.META['request_id']
    logger.info(f"finish request id: {response.headers['X-REQUEST-ID']}")
    return response


    logger.py

    import logging


    def set_logger(name):
    logger=logging.getLogger(name)
    handler=logging.StreamHandler()
    handler.setLevel(logging.DEBUG)
    fmt=logging.Formatter(fmt='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
    handler.setFormatter(fmt)
    logger.addHandler(handler)
    return logger

    logger=set_logger('gg')


    views

    def index(request: HttpRequest):
    logger.info("hello world")
    return JsonResponse("hello world")


    but it tell me

    Traceback (most recent call last):
    File "E:\miniconda\envs\py312\Lib\wsgiref\handlers.py", line 137, in run
    self.result = application(self.environ, self.start_response)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "E:\miniconda\envs\py312\Lib\site-packages\django\contrib\staticfiles\handlers.py", line 80, in __call__
    return self.application(environ, start_response)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "E:\miniconda\envs\py312\Lib\site-packages\django\core\handlers\wsgi.py", line 124, in __call__
    response = self.get_response(request)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
    File "E:\miniconda\envs\py312\Lib\site-packages\django\core\handlers\base.py", line 141, in get_response
    response._resource_closers.append(request.close)
    ^^^^^^^^^^^^^^^^^^^^^^^^^^
    AttributeError: 'WSGIRequest' object has no attribute '_resource_closers'
    [20/Apr/2024 22:32:59] "GET /index/ HTTP/1.1" 500 59


    is it right way to implement a middleware? why it call a WSGIRequest error? it should be a respone-like object error Any help will be appreciate

    Continue reading...

Compartilhe esta Página