extend logs
This commit is contained in:
1 parent
695969f015
commit
61e85baf08
9 files changed
+135
-20
No files matched your search
+1
-1
@@ -118,7 +118,7 @@ async def s_handle_exception(request, exception):
|
||||
response_buffer = await close_db_session(request, response_buffer)
|
||||
response_buffer.headers["Access-Control-Allow-Origin"] = "*"
|
||||
response_buffer.headers["Access-Control-Allow-Methods"] = "GET, POST, OPTIONS"
|
||||
response_buffer.headers["Access-Control-Allow-Headers"] = "Origin, Content-Type, Accept, Authorization, Referer, User-Agent, Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site, x-request-id"]
|
||||
response_buffer.headers["Access-Control-Allow-Headers"] = "Origin, Content-Type, Accept, Authorization, Referer, User-Agent, Sec-Fetch-Dest, Sec-Fetch-Mode, Sec-Fetch-Site, x-request-id"
|
||||
response_buffer.headers["Access-Control-Allow-Credentials"] = "true"
|
||||
response_buffer.headers["X-Session-Id"] = session_id
|
||||
response_buffer.headers["X-Error-Id"] = error_id
|
||||
|
||||
@@ -12,6 +12,9 @@ from app.core.models.user import User
|
||||
from sqlalchemy import select
|
||||
from app.core.storage import new_session
|
||||
from datetime import datetime, timedelta
|
||||
from app.core.log_context import (
|
||||
ctx_session_id, ctx_user_id, ctx_method, ctx_path, ctx_remote
|
||||
)
|
||||
|
||||
|
||||
def attach_headers(response, request=None):
|
||||
@@ -163,6 +166,17 @@ async def attach_user_to_request(request):
|
||||
# Correlation/session id for this request: prefer proxy-provided X-Request-ID
|
||||
incoming_req_id = request.headers.get('X-Request-Id') or request.headers.get('X-Request-ID')
|
||||
request.ctx.session_id = (incoming_req_id or uuid4().hex)[:32]
|
||||
# Populate contextvars for automatic logging context
|
||||
try:
|
||||
ctx_session_id.set(request.ctx.session_id)
|
||||
ctx_method.set(request.method)
|
||||
ctx_path.set(request.path)
|
||||
_remote = (request.headers.get('X-Forwarded-For') or request.remote_addr or request.ip)
|
||||
if _remote and isinstance(_remote, str) and ',' in _remote:
|
||||
_remote = _remote.split(',')[0].strip()
|
||||
ctx_remote.set(_remote)
|
||||
except BaseException:
|
||||
pass
|
||||
try:
|
||||
make_log(
|
||||
"HTTP",
|
||||
@@ -172,6 +186,12 @@ async def attach_user_to_request(request):
|
||||
except BaseException:
|
||||
pass
|
||||
await try_authorization(request)
|
||||
# Update user_id in context after auth
|
||||
try:
|
||||
if request.ctx.user and request.ctx.user.id:
|
||||
ctx_user_id.set(request.ctx.user.id)
|
||||
except BaseException:
|
||||
pass
|
||||
await save_activity(request)
|
||||
await try_service_authorization(request)
|
||||
|
||||
@@ -202,4 +222,13 @@ async def close_request_handler(request, response):
|
||||
async def close_db_session(request, response):
|
||||
request, response = await close_request_handler(request, response)
|
||||
response = attach_headers(response, request)
|
||||
# Clear contextvars
|
||||
try:
|
||||
ctx_session_id.set(None)
|
||||
ctx_user_id.set(None)
|
||||
ctx_method.set(None)
|
||||
ctx_path.set(None)
|
||||
ctx_remote.set(None)
|
||||
except BaseException:
|
||||
pass
|
||||
return response
|
||||
Reference in new issue
Block a user