Сообщения журнала приложений 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.