diff --git a/backend/apps/common/exceptions.py b/backend/apps/common/exceptions.py index 5112b56..a1cff6e 100644 --- a/backend/apps/common/exceptions.py +++ b/backend/apps/common/exceptions.py @@ -1,5 +1,6 @@ import json import logging +from uuid import uuid4 from rest_framework.views import exception_handler @@ -50,6 +51,10 @@ def _query_params(request): return _redact({key: values if len(values) != 1 else values[0] for key, values in request.GET.lists()}) +def _request_id(request): + return request.headers.get("X-Request-ID") or f"req_{uuid4().hex}" + + def _user_context(request): user = getattr(request, "user", None) if not user or not getattr(user, "is_authenticated", False): @@ -71,6 +76,7 @@ def _event(exc, context, response=None): request = context.get("request") response_data = _serializable(getattr(response, "data", None)) if response is not None else None return { + "request_id": _request_id(request) if request is not None else "", "method": getattr(request, "method", ""), "path": getattr(request, "path", ""), "query_params": _query_params(request) if request is not None else {}, diff --git a/deploy/asp-compose/README.md b/deploy/asp-compose/README.md index 68ca8fc..597ee63 100644 --- a/deploy/asp-compose/README.md +++ b/deploy/asp-compose/README.md @@ -93,9 +93,11 @@ After changing only script or YAML definitions, use **System Settings > Runtime ## Logs -Backend process logs are mounted to `./logs`: +Nginx and backend process logs are mounted to `./logs`: ```text +logs/nginx/access.log +logs/nginx/error.log logs/django.log logs/asgi.log logs/agentic-module-worker.log diff --git a/deploy/asp-compose/README.zh.md b/deploy/asp-compose/README.zh.md index d2c077d..1c90357 100644 --- a/deploy/asp-compose/README.zh.md +++ b/deploy/asp-compose/README.zh.md @@ -93,9 +93,11 @@ ASP_RUSTFS_CONSOLE_PORT=9001 ## 日志 -后端进程日志会挂载到 `./logs`: +Nginx 和后端进程日志会挂载到 `./logs`: ```text +logs/nginx/access.log +logs/nginx/error.log logs/django.log logs/asgi.log logs/agentic-module-worker.log diff --git a/deploy/asp-compose/compose.yaml b/deploy/asp-compose/compose.yaml index a3e219b..e65548f 100644 --- a/deploy/asp-compose/compose.yaml +++ b/deploy/asp-compose/compose.yaml @@ -29,6 +29,7 @@ services: volumes: - static-files:/usr/share/nginx/backend-static:ro - ./certs:/etc/nginx/certs + - ./logs/nginx:/var/log/asp/nginx depends_on: asp-web: condition: service_healthy diff --git a/deploy/asp-compose/logs/nginx/.gitkeep b/deploy/asp-compose/logs/nginx/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/frontend/nginx.conf.template b/frontend/nginx.conf.template index 1954431..f8b8130 100644 --- a/frontend/nginx.conf.template +++ b/frontend/nginx.conf.template @@ -1,7 +1,17 @@ +log_format asp_main '$remote_addr - $remote_user [$time_local] "$request" ' + '$status $body_bytes_sent "$http_referer" "$http_user_agent" ' + 'request_id=$request_id request_time=$request_time ' + 'upstream_addr="$upstream_addr" upstream_status="$upstream_status" ' + 'upstream_response_time="$upstream_response_time"'; + server { listen 443 ssl; http2 on; server_name _; + access_log /var/log/nginx/access.log asp_main; + access_log /var/log/asp/nginx/access.log asp_main; + error_log /var/log/nginx/error.log warn; + error_log /var/log/asp/nginx/error.log warn; ssl_certificate /etc/nginx/certs/asp.crt; ssl_certificate_key /etc/nginx/certs/asp.key; @@ -21,6 +31,7 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Request-ID $request_id; proxy_buffering off; } @@ -30,6 +41,7 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Request-ID $request_id; } location /admin/ { @@ -38,6 +50,7 @@ server { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Request-ID $request_id; } location /static/ {