Исправление двойного логирования ошибок
This commit is contained in:
@@ -8,8 +8,6 @@
|
||||
Описание функции custom_exception_handler
|
||||
"""
|
||||
|
||||
import logging
|
||||
|
||||
from rest_framework import status
|
||||
from rest_framework.exceptions import MethodNotAllowed
|
||||
from rest_framework.exceptions import NotAuthenticated
|
||||
@@ -23,7 +21,6 @@ from net.xeaf.rack.models.responses import ErrorResponse
|
||||
from net.xeaf.rack.utils.exceptions import ForbiddenException
|
||||
from net.xeaf.rack.utils.exceptions import NotFoundException
|
||||
from net.xeaf.rack.utils.exceptions import UnauthorizedException
|
||||
from wsgiapp import settings
|
||||
|
||||
|
||||
def custom_exception_handler(exc: CoreException | Exception, context: dict) -> Response:
|
||||
@@ -134,17 +131,6 @@ def _make_error_response(status_code: int, detail: list | dict | str | bool | No
|
||||
:return: Ответ
|
||||
"""
|
||||
|
||||
logger = logging.getLogger(settings.LOGGER_NAME)
|
||||
|
||||
if status_code == status.HTTP_400_BAD_REQUEST:
|
||||
logger.debug(str(exc_info), exc_info=exc_info)
|
||||
elif status_code == status.HTTP_401_UNAUTHORIZED:
|
||||
logger.warning(str(exc_info), exc_info=exc_info)
|
||||
elif status_code == status.HTTP_403_FORBIDDEN:
|
||||
logger.warning(str(exc_info), exc_info=exc_info)
|
||||
elif status_code == status.HTTP_404_NOT_FOUND:
|
||||
logger.error(str(exc_info), exc_info=exc_info)
|
||||
else:
|
||||
logger.critical(str(exc_info), exc_info=exc_info)
|
||||
|
||||
return ErrorResponse(status_code=status_code, detail=detail, meta=meta, pure_status=pure_status)
|
||||
result = ErrorResponse(status_code=status_code, detail=detail, meta=meta, pure_status=pure_status)
|
||||
result._raised_exception = exc_info
|
||||
return result
|
||||
|
||||
@@ -63,7 +63,7 @@ class CustomLoggingMiddleware:
|
||||
|
||||
# Обрабатываем данные запроса, ответа и перехваченного исключения
|
||||
body = self._process_body(request)
|
||||
exc = getattr(request, "_raised_exception", None)
|
||||
exc = getattr(response, "_raised_exception", None)
|
||||
status_code = response.status_code
|
||||
request_id = request.META.get('HTTP_X_REQUEST_ID', '')
|
||||
response_content = self._process_response(response)
|
||||
@@ -172,18 +172,19 @@ class CustomLoggingMiddleware:
|
||||
:param exc: Исключение
|
||||
"""
|
||||
|
||||
if exc:
|
||||
|
||||
log_message += f"\nException: {str(exc)}"
|
||||
if exc or status_code >= status.HTTP_400_BAD_REQUEST:
|
||||
|
||||
if status_code == status.HTTP_400_BAD_REQUEST:
|
||||
self.logger.debug(log_message, exc_info=exc)
|
||||
elif status_code in [status.HTTP_401_UNAUTHORIZED, status.HTTP_403_FORBIDDEN]: # UNAUTHORIZED, FORBIDDEN
|
||||
elif status_code == status.HTTP_401_UNAUTHORIZED:
|
||||
self.logger.warning(log_message, exc_info=exc)
|
||||
elif status_code == status.HTTP_403_FORBIDDEN:
|
||||
self.logger.warning(log_message, exc_info=exc)
|
||||
elif status_code == status.HTTP_404_NOT_FOUND:
|
||||
self.logger.error(log_message, exc_info=exc)
|
||||
else:
|
||||
self.logger.critical(log_message, exc_info=exc)
|
||||
|
||||
else:
|
||||
self.logger.debug(log_message)
|
||||
|
||||
|
||||
67
net/xeaf/rack/models/journal_model.py
Normal file
67
net/xeaf/rack/models/journal_model.py
Normal file
@@ -0,0 +1,67 @@
|
||||
# DRF Rack
|
||||
# Библиотека классов расширений для Django REST Framework
|
||||
#
|
||||
# Автор: Николай В. Анохин <n.anokhin@xeaf.net>
|
||||
# Все права защищены. Лицензия: MIT
|
||||
|
||||
"""
|
||||
Описание класса Session
|
||||
"""
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from net.xeaf.rack.core import CoreModel
|
||||
from net.xeaf.rack.models.mixins import CreatedAtMixin
|
||||
|
||||
|
||||
class JournalModel(CoreModel, CreatedAtMixin):
|
||||
"""
|
||||
Модель журнала работы пользователей
|
||||
"""
|
||||
|
||||
account = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
null=False,
|
||||
blank=False,
|
||||
related_name="fk_journal_model_account",
|
||||
verbose_name=_("rack.models.account"),
|
||||
)
|
||||
""" Аккаунт пользователя """
|
||||
|
||||
actual_account = models.ForeignKey(
|
||||
settings.AUTH_USER_MODEL,
|
||||
on_delete=models.CASCADE,
|
||||
null=False,
|
||||
blank=False,
|
||||
related_name="fk_journal_model_actual_account",
|
||||
verbose_name=_("rack.models.session_model.actual_account"),
|
||||
)
|
||||
""" Актуальный аккаунт пользователя """
|
||||
|
||||
action = models.CharField(
|
||||
max_length=36,
|
||||
null=False,
|
||||
blank=False,
|
||||
verbose_name=_("rack.models.journal_model.action"),
|
||||
)
|
||||
""" Действие """
|
||||
|
||||
|
||||
|
||||
class Meta:
|
||||
"""
|
||||
Параметры конфигурации класса
|
||||
"""
|
||||
# Индексы для производительности
|
||||
indexes = [
|
||||
models.Index(fields=["account"]),
|
||||
models.Index(fields=["actual_account"]),
|
||||
]
|
||||
|
||||
# Данные таблицы
|
||||
db_table = "rack_journal"
|
||||
verbose_name = _("rack.models.journal")
|
||||
verbose_name_plural = _("rack.models.journal_plural")
|
||||
@@ -38,7 +38,7 @@ class SessionModel(CoreModel, CreatedAtMixin, ExpiresAtMixin):
|
||||
on_delete=models.CASCADE,
|
||||
null=False,
|
||||
blank=False,
|
||||
verbose_name=_("rack.models.session_model.account"),
|
||||
verbose_name=_("rack.models.account"),
|
||||
)
|
||||
""" Аккаунт пользователя """
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ LOGGING = {
|
||||
|
||||
"formatters": {
|
||||
"custom_format": {
|
||||
"format": "{asctime} [{levelname}] {message}",
|
||||
"format": "\n{asctime} [{levelname}] {message}",
|
||||
"datefmt": "%Y-%m-%d %H:%M:%S",
|
||||
"style": "{",
|
||||
},
|
||||
|
||||
@@ -45,6 +45,8 @@ class VersionViewSet(ViewSetRetrieveMixin, CoreViewSet):
|
||||
"version": SettingUtils.get_app_version()
|
||||
}
|
||||
|
||||
z = 1 / 0
|
||||
|
||||
return version_info
|
||||
|
||||
@classmethod
|
||||
|
||||
Reference in New Issue
Block a user