log: pass exception via exc_info instead of string interpolation

This commit is contained in:
NoodleLDS
2026-06-10 23:55:23 -03:00
committed by Alexandre Teixeira
parent 48eb2abd8e
commit 58bbbf1c1f
6 changed files with 15 additions and 15 deletions
+3 -3
View File
@@ -332,7 +332,7 @@ if AUTH_ENABLED:
request.state.api_token = False
return await call_next(request)
except Exception as _e:
logger.warning("Internal tool auth header check failed: %s", _e)
logger.warning("Internal tool auth header check failed", exc_info=_e)
# Allow DIRECT localhost requests (internal service calls from
# heartbeats etc.). Tunnel/proxy-forwarded requests are excluded by
# _is_trusted_loopback so LOCALHOST_BYPASS can't be abused over a
@@ -386,7 +386,7 @@ if AUTH_ENABLED:
try:
await _asyncio.to_thread(_do)
except Exception as _e:
logger.debug("Failed to update token last_used_at: %s", _e)
logger.debug("Failed to update token last_used_at", exc_info=_e)
_asyncio.create_task(_touch_last_used(matched_id))
# Keep bearer-token callers out of normal cookie/user
request.state.current_user = "api"
@@ -464,7 +464,7 @@ async def serve_generated_image(filename: str, request: Request):
except HTTPException:
raise
except Exception as _e:
logger.warning("Image ownership verification failed for %r: %s", filename, _e)
logger.warning("Image ownership verification failed for %r", filename, exc_info=_e)
ext = filename.rsplit('.', 1)[-1].lower()
mime = {
"png": "image/png", "jpg": "image/jpeg", "jpeg": "image/jpeg",
+4 -4
View File
@@ -127,7 +127,7 @@ def _clear_orphaned_session_endpoint(sess, owner: str | None = None) -> bool:
sess.headers = {}
return True
except Exception as e:
logger.warning("Failed to clear orphaned session endpoint: %s", e)
logger.warning("Failed to clear orphaned session endpoint", exc_info=e)
db.rollback()
return False
finally:
@@ -146,7 +146,7 @@ def _endpoint_cache_contains_model(endpoint, model: str) -> bool:
try:
models = json.loads(raw) if isinstance(raw, str) else raw
except Exception as e:
logger.warning("Failed to parse cached models list, treating as containing model: %s", e)
logger.warning("Failed to parse cached models list, treating as containing model", exc_info=e)
return True
if not isinstance(models, list) or not models:
return True
@@ -239,7 +239,7 @@ def _recover_empty_session_model(sess, session_id: str, owner: str | None = None
try:
cached = json.loads(ep.cached_models) if isinstance(ep.cached_models, str) else (ep.cached_models or [])
except Exception as e:
logger.warning("Failed to parse cached_models for endpoint %r: %s", getattr(ep, "id", "?"), e)
logger.warning("Failed to parse cached_models for endpoint %r", getattr(ep, "id", "?"), exc_info=e)
cached = []
if not cached:
visible = []
@@ -650,7 +650,7 @@ def setup_chat_routes(
try:
att_ids = [str(x) for x in json.loads(attachments)]
except Exception as e:
logger.warning("Failed to parse attachments JSON, ignoring attachments: %s", e)
logger.warning("Failed to parse attachments JSON, ignoring attachments", exc_info=e)
no_memory = str(form_data.get("no_memory", "")).lower() == "true"
pre_context_tool_policy = build_effective_tool_policy(
+2 -2
View File
@@ -504,7 +504,7 @@ def setup_document_routes(session_manager, upload_handler=None) -> APIRouter:
try:
data = await request.json()
except Exception as e:
logger.warning("Failed to parse export request body, defaulting to empty: %s", e)
logger.warning("Failed to parse export request body, defaulting to empty", exc_info=e)
data = {}
ids = data.get("ids") or []
if not ids:
@@ -647,7 +647,7 @@ def setup_document_routes(session_manager, upload_handler=None) -> APIRouter:
from src.agent_tools.document_tools import clear_active_document
clear_active_document(doc_id)
except Exception as e:
logger.warning("Failed to clear active document %r on detach: %s", doc_id, e)
logger.warning("Failed to clear active document %r on detach", doc_id, exc_info=e)
db.commit()
db.refresh(doc)
return _doc_to_dict(doc)
+2 -2
View File
@@ -80,7 +80,7 @@ def _email_tag_owner_aliases(account_id: str | None, owner: str = "") -> list[st
cfg.get("from_address") or "",
])
except Exception as _e:
logger.warning("Failed to resolve email account alias: %s", _e)
logger.warning("Failed to resolve email account alias", exc_info=_e)
resolved_account_id = None
row = db.get(_EA, resolved_account_id) if resolved_account_id else None
if row:
@@ -88,7 +88,7 @@ def _email_tag_owner_aliases(account_id: str | None, owner: str = "") -> list[st
finally:
db.close()
except Exception as _e:
logger.warning("Failed to load email aliases: %s", _e)
logger.warning("Failed to load email aliases", exc_info=_e)
out = []
for a in aliases:
a = (a or "").strip()
+2 -2
View File
@@ -524,7 +524,7 @@ def get_builtin_overrides() -> dict:
ov = get_setting("builtin_tool_overrides", {})
return ov if isinstance(ov, dict) else {}
except Exception as e:
logger.warning("Failed to load builtin tool overrides, using defaults: %s", e)
logger.warning("Failed to load builtin tool overrides, using defaults", exc_info=e)
return {}
@@ -974,7 +974,7 @@ def _build_system_prompt(
from src.pdf_form_doc import find_source_upload_id
_is_form_backed = bool(find_source_upload_id(active_document.current_content or ""))
except Exception as e:
logger.warning("Failed to detect if document is form-backed, assuming plain: %s", e)
logger.warning("Failed to detect if document is form-backed, assuming plain", exc_info=e)
if _is_form_backed:
doc_ctx = (
+2 -2
View File
@@ -284,7 +284,7 @@ def _is_ollama_native_url(url: str) -> bool:
try:
parsed = urlparse(url or "")
except Exception as e:
logger.warning("Failed to parse URL for Ollama detection %r: %s", url, e)
logger.warning("Failed to parse URL for Ollama detection %r", url, exc_info=e)
return False
host = parsed.hostname or ""
path = (parsed.path or "").rstrip("/")
@@ -1347,7 +1347,7 @@ def list_model_ids(
r.raise_for_status()
return [m.get("name") or m.get("model") for m in (r.json().get("models") or []) if m.get("name") or m.get("model")]
except Exception as e:
logger.warning("Failed to fetch model list from endpoint %r: %s", base_chat_url, e)
logger.warning("Failed to fetch model list from endpoint %r", base_chat_url, exc_info=e)
return []
def normalize_model_id(