Сообщения журнала приложений Django не отображаются в ECS/CloudWatch

Выпуск:

У меня есть проект Django, развернутый на ECS, и у меня возникли проблемы с конфигурацией протоколирования. Я не могу увидеть свои пользовательские сообщения в журнале AWS CloudWatch Logs. Я вижу только сообщения журналов botocore, urllib3 и root loggers. Мои пользовательские сообщения журнала вообще не отображаются.

Текущая конфигурация ведения журнала:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'json': {
            'format': '%(levelname)s %(asctime)s %(name)s %(message)s %(lineno)d %(pathname)s',
            'class': 'pythonjsonlogger.jsonlogger.JsonFormatter',
        },
    },
    'handlers': {
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'json',
        },
    },
    'loggers': {
        'django': {
            'handlers': ['console'],
            'level': 'INFO',
            'propagate': True,
        },
        'ru_profile': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': False,
        },
        '': {
            'handlers': ['console'],
            'level': 'DEBUG',
            'propagate': True,
        },
    },
    'root': {
        'handlers': ['console'],
        'level': 'DEBUG',
    },
}

Пример использования журнала:

import logging

logger = logging.getLogger('ru_profile')

class ForgotPasswordView(CreateView):
    model = User
    template_name = 'user/forgot_password.html'
    form_class = ForgotPasswordForm

    def form_valid(self, form):
        phone = str(form.cleaned_data['phone'])
        user = User.find_by_phone(phone)
        if user is not None:
            user.send_reset_pin()
            logger.info(f"Reset PIN sent successfully to {phone}")
        else:
            logger.error(f"Couldn't reset PIN, user not found for phone '{phone}'")
            django_messages.error(self.request, _("Couldn't reset your PIN. Please try again"))
            return self.form_invalid(form)

        return redirect('reset_pin_view', phone=phone)

Дополнительный контекст:

  • Попытался добавить ENV PYTHONUNBUFFERED=1 в Dockerfile.
  • операторы print() видны в CloudWatch
  • протестированы различные уровни протоколирования - ни один не отображается.
  • приложение работает с uwsgi и supervisord.
Вернуться на верх