Улучшите журналы приложений Django, чтобы отображать только пользовательский журнал из настроек Logging settings

Я пытаюсь улучшить логирование моего приложения Django, чтобы оно было стандартизировано для запросов с помощью Loki, и для каждого журнала, который я создаю, записывается 3 записи. Например, любой запрос (успешный или неудачный) к нижеприведенной конечной точке будет генерировать три записи журнала.

  • views.py
class ModelViewSet(models.ModelViewSet):
    def retrieve(self, request, *args, **kwargs):
        try:
            # do something
            logger.info(f"{request.path} {request.method} 200: user {request.user.id} - success!")
            return Response(serializer.data)

        except Exception as exc:
            logger.warning(f"{request.path} {request.method} {exc.status_code}: user {request.user.id} - {exc.detail}")
            return Response(exc.detail, status=exc.status_code)
  • settings.py
LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'timestamp': {
            'format': '{asctime} {levelname} {message}',
            'style': '{',
        },
    },
    'handlers': {
        'console': {
            'class': 'logging.StreamHandler',
            'formatter': 'timestamp'
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console', ],
            'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),
        },
    },
}
  • Вывод в консоль
2022-06-02 10:26:09,714 WARNING /api/v1/<path/ GET 403: user 71 - You do not have permission to perform this action.
2022-06-02 10:26:09,814 WARNING Forbidden: /api/v1/<path/
2022-06-02 10:26:09,815 WARNING "GET /api/v1/<path/ HTTP/1.1" 403 12495

Есть предложение, как оптимизировать и иметь только одну запись, предпочтительно мою пользовательскую запись журнала и избавиться от двух других? Это также поможет значительно уменьшить размер хранимых логов.

Если вы хотите подавлять сообщения от самого пакета Django, вы можете просто установить уровень CRITICAL, а не INFO в конфигурации. Я не могу сказать, из какого пакета ваше настроенное сообщение журнала, но предположительно оно не из пакета django - в этом случае сообщения уровня WARNING и выше все равно должны проходить. Если вы измените формат, чтобы включить {name}, это покажет имена регистраторов в выводе журнала, и это должно подсказать вам, как точно настроить конфигурацию регистрации.

Вернуться на верх