somratpro Claude Sonnet 4.6 commited on
Commit
dc0726e
Β·
1 Parent(s): 28f94e0

fix: filter /health hits from uvicorn access log

Browse files

Custom HealthEndpointFilter drops /health from uvicorn.access handler.
Nginx proxy-passes health probes to backend, causing log spam every 30s.
Filter reads ASGI scope.path so it catches it before message formatting.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

Files changed (1) hide show
  1. start.sh +19 -4
start.sh CHANGED
@@ -376,11 +376,26 @@ nginx -t 2>/dev/null && nginx || {
376
  exit 1
377
  }
378
 
 
 
 
 
 
 
 
 
 
 
 
 
379
  # ── Logging config: silence per-request noise ────────────────────
380
  cat > /tmp/logging-config.json << 'LOGEOF'
381
  {
382
  "version": 1,
383
  "disable_existing_loggers": false,
 
 
 
384
  "formatters": {
385
  "default": {
386
  "()": "uvicorn.logging.DefaultFormatter",
@@ -394,14 +409,14 @@ cat > /tmp/logging-config.json << 'LOGEOF'
394
  },
395
  "handlers": {
396
  "default": {"formatter": "default", "class": "logging.StreamHandler", "stream": "ext://sys.stdout"},
397
- "access": {"formatter": "access", "class": "logging.StreamHandler", "stream": "ext://sys.stdout"}
398
  },
399
  "loggers": {
400
  "uvicorn": {"handlers": ["default"], "level": "INFO", "propagate": false},
401
  "uvicorn.error": {"level": "INFO"},
402
  "uvicorn.access": {"handlers": ["access"], "level": "INFO", "propagate": false},
403
- "google_genai": {"level": "WARNING"},
404
- "google_genai.models": {"level": "WARNING"},
405
  "google_genai._api_client": {"level": "WARNING"},
406
  "httpx": {"level": "WARNING"},
407
  "primp": {"level": "WARNING"},
@@ -415,7 +430,7 @@ LOGEOF
415
  echo "Starting DeerFlow backend on port $BACKEND_PORT..."
416
  (
417
  cd "$APP_DIR/backend" && \
418
- PYTHONPATH=. \
419
  PYTHONWARNINGS="ignore::UserWarning:pydantic" \
420
  uv run --no-sync \
421
  uvicorn app.gateway.app:app \
 
376
  exit 1
377
  }
378
 
379
+ # ── Custom log filter: drop /health from uvicorn access log ───────
380
+ cat > /tmp/hf_log_filter.py << 'EOF'
381
+ import logging
382
+
383
+ class HealthEndpointFilter(logging.Filter):
384
+ def filter(self, record):
385
+ try:
386
+ return record.scope.get("path", "") != "/health"
387
+ except AttributeError:
388
+ return "/health" not in record.getMessage()
389
+ EOF
390
+
391
  # ── Logging config: silence per-request noise ────────────────────
392
  cat > /tmp/logging-config.json << 'LOGEOF'
393
  {
394
  "version": 1,
395
  "disable_existing_loggers": false,
396
+ "filters": {
397
+ "no_health": {"()": "hf_log_filter.HealthEndpointFilter"}
398
+ },
399
  "formatters": {
400
  "default": {
401
  "()": "uvicorn.logging.DefaultFormatter",
 
409
  },
410
  "handlers": {
411
  "default": {"formatter": "default", "class": "logging.StreamHandler", "stream": "ext://sys.stdout"},
412
+ "access": {"formatter": "access", "class": "logging.StreamHandler", "stream": "ext://sys.stdout", "filters": ["no_health"]}
413
  },
414
  "loggers": {
415
  "uvicorn": {"handlers": ["default"], "level": "INFO", "propagate": false},
416
  "uvicorn.error": {"level": "INFO"},
417
  "uvicorn.access": {"handlers": ["access"], "level": "INFO", "propagate": false},
418
+ "google_genai": {"level": "WARNING"},
419
+ "google_genai.models": {"level": "WARNING"},
420
  "google_genai._api_client": {"level": "WARNING"},
421
  "httpx": {"level": "WARNING"},
422
  "primp": {"level": "WARNING"},
 
430
  echo "Starting DeerFlow backend on port $BACKEND_PORT..."
431
  (
432
  cd "$APP_DIR/backend" && \
433
+ PYTHONPATH=".:/tmp" \
434
  PYTHONWARNINGS="ignore::UserWarning:pydantic" \
435
  uv run --no-sync \
436
  uvicorn app.gateway.app:app \