This commit is contained in:
@@ -3,6 +3,10 @@ from pathlib import Path
|
||||
from typing import Any
|
||||
|
||||
import colorlog
|
||||
from graphql import GraphQLError
|
||||
|
||||
# Импорт отложен для избежания циклических импортов
|
||||
# from auth.exceptions import AuthorizationError
|
||||
|
||||
_lib_path = Path(__file__).parents[1]
|
||||
_leng_path = len(_lib_path.as_posix())
|
||||
@@ -114,3 +118,37 @@ ignore_logs = ["_trace", "httpx", "_client", "atrace", "aiohttp", "_client"]
|
||||
for lgr in ignore_logs:
|
||||
loggr = logging.getLogger(lgr)
|
||||
loggr.setLevel(logging.INFO)
|
||||
|
||||
|
||||
def custom_error_formatter(error: GraphQLError, debug: bool = False) -> dict[Any, Any]:
|
||||
"""
|
||||
Кастомный форматтер ошибок для подавления трейсбеков у ожидаемых ошибок авторизации.
|
||||
🔍 Логирует AuthorizationError как обычные события, не как исключения
|
||||
"""
|
||||
# Преобразуем в словарь для работы с ним
|
||||
formatted_error: dict[str, Any] = {
|
||||
"message": error.message,
|
||||
"locations": getattr(error.formatted, "locations", []),
|
||||
"path": getattr(error.formatted, "path", []),
|
||||
"extensions": getattr(error.formatted, "extensions", {}),
|
||||
}
|
||||
|
||||
# Для ошибок авторизации не показываем трейсбек
|
||||
# Проверяем по имени класса для избежания циклических импортов
|
||||
if (
|
||||
error.original_error
|
||||
and hasattr(error.original_error, "__class__")
|
||||
and error.original_error.__class__.__name__ == "AuthorizationError"
|
||||
):
|
||||
# Убираем extensions.exception если есть
|
||||
if "extensions" in formatted_error and "exception" in formatted_error["extensions"]:
|
||||
del formatted_error["extensions"]["exception"]
|
||||
# Логируем как обычное событие, а не ошибку
|
||||
root_logger.info(f"🔍 [auth] {error.message}")
|
||||
# Для остальных ошибок используем стандартное логирование
|
||||
elif debug and error.original_error:
|
||||
root_logger.error(f"GraphQL error: {error.message}", exc_info=error.original_error)
|
||||
else:
|
||||
root_logger.warning(f"GraphQL error: {error.message}")
|
||||
|
||||
return formatted_error
|
||||
|
||||
Reference in New Issue
Block a user