Улучшите журналы приложений 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}
, это покажет имена регистраторов в выводе журнала, и это должно подсказать вам, как точно настроить конфигурацию регистрации.