Настройка логирования Django + Celery на Heroku
TLDR; Я развернул приложение django + celery на heroku, но я не могу увидеть журналы Celery в журналах heroku.
django==5.0.1
celery==5.3.4
Вот соответствующие файлы
Procfile
web: daphne ecom_proj.asgi:application --port $PORT --bind 0.0.0.0 -v2
worker: celery -A ecom_proj.celery_app worker -E -B --loglevel=INFO
settings.py
LOGGING = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"base": {
"()": "django.utils.log.ServerFormatter",
"format": "[{server_time}] {name} {levelname} {module} {message}",
"style": "{",
}
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"formatter": "base",
"level": "INFO",
},
},
"loggers": {
"": {
"handlers": ["console"],
"level": "INFO",
},
"django": {
"handlers": ["console"],
"level": "INFO",
"propagate": False,
},
"celery": {
"handlers": ["console"],
"level": "INFO",
"propagate": False,
},
},
}
celery.py
import os
from celery import Celery
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ecom_proj.settings")
celery_app = Celery("ecom_proj_celery")
celery_app.autodiscover_tasks()
myapp/tasks.py
import logging
from celery import shared_task
logger = logging.getLogger(__name__)
@shared_task
def my_task():
logger.info("task has started")
# Do something....
Со всеми этими файлами я развернул проект django на heroku и смог увидеть сообщения журнала процесса web, однако для процесса worker (Celery) я не могу увидеть никаких журналов, которые находятся в функциях задачи.
Я просмотрел различные вопросы SOF, и большинство из них устарели и основаны на django-heroku , который уже устарел.
Я также использовал сигналы сельдерея, такие как worker_process_init
, beat_init
и setup_logging
, ниже приведен код. Я также пытался установить CELERY_WORKER_HIJACK_ROOT_LOGGER = False
.
Я пробовал различные комбинации этих подходов, но ни один из них, похоже, не работает. Не уверен, что именно я упускаю. Буду очень признателен, если кто-нибудь поделится рабочей конфигурацией на этих версиях django и celery или укажет мне на правильный ресурс.