diff --git a/api_browser.py b/api_browser.py index c81dfcc..c059fff 100755 --- a/api_browser.py +++ b/api_browser.py @@ -36,6 +36,13 @@ except Exception: _API_REQUEST_TIMEOUT_SECONDS = 5.0 _API_REQUEST_TIMEOUT_SECONDS = max(3.0, _API_REQUEST_TIMEOUT_SECONDS) +_API_DIAGNOSTIC_LOG = str(os.environ.get("API_DIAGNOSTIC_LOG", "")).strip().lower() in ("1", "true", "yes", "on") +try: + _API_DIAGNOSTIC_SLOW_MS = int(os.environ.get("API_DIAGNOSTIC_SLOW_MS", "0") or "0") +except Exception: + _API_DIAGNOSTIC_SLOW_MS = 0 +_API_DIAGNOSTIC_SLOW_MS = max(0, _API_DIAGNOSTIC_SLOW_MS) + _cookie_domain_fallback = urlsplit(BASE_URL).hostname or "postoa.aidunsoft.com" _api_browser_instances: "weakref.WeakSet[APIBrowser]" = weakref.WeakSet() @@ -143,16 +150,31 @@ class APIBrowser: else: kwargs.setdefault('timeout', _API_REQUEST_TIMEOUT_SECONDS) last_error = None + timeout_value = kwargs.get("timeout") + diag_enabled = _API_DIAGNOSTIC_LOG + slow_ms = _API_DIAGNOSTIC_SLOW_MS for attempt in range(1, max_retries + 1): + start_ts = _time_module.time() try: if method.lower() == 'get': resp = self.session.get(url, **kwargs) else: resp = self.session.post(url, **kwargs) + if diag_enabled: + elapsed_ms = int((_time_module.time() - start_ts) * 1000) + if slow_ms <= 0 or elapsed_ms >= slow_ms: + self.log( + f"[API][trace] {method.upper()} {url} ok status={resp.status_code} elapsed_ms={elapsed_ms} timeout={timeout_value} attempt={attempt}/{max_retries}" + ) return resp except Exception as e: last_error = e + if diag_enabled: + elapsed_ms = int((_time_module.time() - start_ts) * 1000) + self.log( + f"[API][trace] {method.upper()} {url} err={type(e).__name__} elapsed_ms={elapsed_ms} timeout={timeout_value} attempt={attempt}/{max_retries}" + ) if attempt < max_retries: self.log(f"[API] 请求超时,{retry_delay}秒后重试 ({attempt}/{max_retries})...") import time diff --git a/docker-compose.yml b/docker-compose.yml index c415071..8b8b550 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -46,6 +46,8 @@ services: # 日志配置 - LOG_LEVEL=INFO - LOG_FILE=logs/app.log + - API_DIAGNOSTIC_LOG=0 + - API_DIAGNOSTIC_SLOW_MS=0 # 知识管理平台配置 - ZSGL_LOGIN_URL=https://postoa.aidunsoft.com/admin/login.aspx - ZSGL_INDEX_URL_PATTERN=index.aspx