mirror of https://github.com/interlegis/sapl.git
7 changed files with 68 additions and 7 deletions
@ -0,0 +1,21 @@ |
|||||
|
# sapl/logging/filters.py |
||||
|
import logging |
||||
|
import contextvars |
||||
|
|
||||
|
_request_id = contextvars.ContextVar("request_id", default="-") |
||||
|
|
||||
|
|
||||
|
def set_request_id(value: str): |
||||
|
_request_id.set(value) |
||||
|
|
||||
|
|
||||
|
def get_request_id() -> str: |
||||
|
return _request_id.get() |
||||
|
|
||||
|
|
||||
|
class RequestIdFilter(logging.Filter): |
||||
|
def filter(self, record: logging.LogRecord) -> bool: |
||||
|
# garante que SEMPRE existe |
||||
|
if not hasattr(record, "request_id"): |
||||
|
record.request_id = get_request_id() |
||||
|
return True |
||||
@ -0,0 +1,24 @@ |
|||||
|
import uuid |
||||
|
from sapl.logging.filters import set_request_id |
||||
|
|
||||
|
HEADER_NAME = "HTTP_X_REQUEST_ID" |
||||
|
RESPONSE_HEADER = "X-Request-ID" |
||||
|
|
||||
|
|
||||
|
def _new_id(): |
||||
|
return uuid.uuid4().hex |
||||
|
|
||||
|
|
||||
|
class RequestIdMiddleware: |
||||
|
def __init__(self, get_response): |
||||
|
self.get_response = get_response |
||||
|
|
||||
|
def __call__(self, request): |
||||
|
# recebe `request_id` do nginx ou do cliente senão cria um |
||||
|
request_id = request.META.get(HEADER_NAME) or _new_id() |
||||
|
request_id = str(request_id)[:64] |
||||
|
request.request_id = request_id |
||||
|
set_request_id(request_id) |
||||
|
response = self.get_response(request) |
||||
|
response[RESPONSE_HEADER] = request_id |
||||
|
return response |
||||
Loading…
Reference in new issue