Skip to content

Commit 64fc6c5

Browse files
committed
Make RequestLoggingMiddleware async capable
1 parent 187a2f9 commit 64fc6c5

File tree

2 files changed

+17
-0
lines changed

2 files changed

+17
-0
lines changed

django_datadog_logger/middleware/request_log.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,36 @@
11
import logging
22
import time
33

4+
from asgiref.sync import iscoroutinefunction, markcoroutinefunction
45
from rest_framework.utils.serializer_helpers import ReturnDict
56

67
logger = logging.getLogger(__name__)
78

89

910
class RequestLoggingMiddleware:
11+
sync_capable = True
12+
async_capable = True
13+
1014
def __init__(self, get_response=None):
1115
self.get_response = get_response
16+
self.async_mode = iscoroutinefunction(self.get_response)
17+
if self.async_mode:
18+
# Mark the class as async-capable, but do the actual switch
19+
# inside __call__ to avoid swapping out dunder methods
20+
markcoroutinefunction(self)
1221

1322
def __call__(self, request):
23+
if self.async_mode:
24+
return self.__acall__(request)
1425
response = self.get_response(request)
1526
self.log_response(request, response)
1627
return response
1728

29+
async def __acall__(self, request):
30+
response = await self.get_response(request)
31+
self.log_response(request, response)
32+
return response
33+
1834
def process_response(self, request, response):
1935
self.log_response(request, response)
2036
return response

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
JSON-log-formatter
22
Django
3+
asgiref
34
djangorestframework
45
backports.zoneinfo;python_version<"3.9"

0 commit comments

Comments
 (0)