fix(logging): replace structlog with stdlib logging to prevent broken pipe crashes
structlog fails with BrokenPipeError when stdout is redirected (e.g., background processes, Docker logs). Replace all structlog.get_logger() calls with logging.getLogger() and convert keyword-style log calls to %-format strings. Also removes stale Docs/tasks.md (2028 lines) and updates Robot Framework tests to match current API behavior.
This commit is contained in:
@@ -410,7 +410,7 @@ async def rate_limit_dependency(request: Request) -> None:
|
||||
record.count += 1
|
||||
if record.count > max_requests:
|
||||
logger.warning(
|
||||
"Rate limit exceeded", extra={"client": client_id}
|
||||
"Rate limit exceeded client=%s", client_id
|
||||
)
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_429_TOO_MANY_REQUESTS,
|
||||
@@ -423,13 +423,10 @@ async def log_request_dependency(request: Request) -> None:
|
||||
"""Log request metadata for auditing and debugging purposes."""
|
||||
|
||||
logger.info(
|
||||
"API request",
|
||||
extra={
|
||||
"method": request.method,
|
||||
"path": request.url.path,
|
||||
"client": request.client.host if request.client else "unknown",
|
||||
"query": dict(request.query_params),
|
||||
},
|
||||
"API request method=%s path=%s client=%s query=%s",
|
||||
request.method, request.url.path,
|
||||
request.client.host if request.client else "unknown",
|
||||
dict(request.query_params),
|
||||
)
|
||||
|
||||
|
||||
@@ -557,23 +554,44 @@ def get_background_loader_service() -> "BackgroundLoaderService":
|
||||
|
||||
if _background_loader_service is None:
|
||||
try:
|
||||
import logging
|
||||
_init_logger = logging.getLogger(__name__)
|
||||
_init_logger.info("Creating BackgroundLoaderService instance...")
|
||||
|
||||
from src.server.services.background_loader_service import (
|
||||
BackgroundLoaderService,
|
||||
)
|
||||
from src.server.services.websocket_service import get_websocket_service
|
||||
|
||||
anime_service = get_anime_service()
|
||||
series_app = get_series_app()
|
||||
websocket_service = get_websocket_service()
|
||||
_init_logger.info("Imported BackgroundLoaderService")
|
||||
|
||||
from src.server.services.websocket_service import get_websocket_service
|
||||
_init_logger.info("Getting websocket_service...")
|
||||
websocket_service = get_websocket_service()
|
||||
_init_logger.info("Got websocket_service: %s", id(websocket_service))
|
||||
|
||||
_init_logger.info("Getting anime_service...")
|
||||
anime_service = get_anime_service()
|
||||
_init_logger.info("Got anime_service: %s", id(anime_service))
|
||||
|
||||
_init_logger.info("Getting series_app...")
|
||||
series_app = get_series_app()
|
||||
_init_logger.info("Got series_app: %s", id(series_app))
|
||||
|
||||
_init_logger.info("Creating BackgroundLoaderService with params: ws=%s, ans=%s, sa=%s",
|
||||
id(websocket_service), id(anime_service), id(series_app))
|
||||
_background_loader_service = BackgroundLoaderService(
|
||||
websocket_service=websocket_service,
|
||||
anime_service=anime_service,
|
||||
series_app=series_app
|
||||
)
|
||||
_init_logger.info("BackgroundLoaderService created successfully: %s", id(_background_loader_service))
|
||||
except HTTPException:
|
||||
raise
|
||||
except Exception as e:
|
||||
import logging
|
||||
_err_logger = logging.getLogger(__name__)
|
||||
_err_logger.error("Error in BackgroundLoaderService creation: %s", str(e))
|
||||
import traceback
|
||||
_err_logger.error("Traceback: %s", traceback.format_exc())
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_500_INTERNAL_SERVER_ERROR,
|
||||
detail=(
|
||||
|
||||
Reference in New Issue
Block a user