Правильная настройка протоколирования Celery в Django - как?
Установка celery на нашем производственном сервере кажется более сложной, чем должна быть - и проблема заключается в регистрации. Наша установка выглядит следующим образом:
- Сервер - Ubuntu 20.04.5 LTS
- Мы запускаем Django 3.2.8 под собственным пользователем и группой с именем "django"
- Процесс Celery также имеет своего пользователя и группу под названием "celery".
- Celery настроен как сервис и регистрируется в
/var/log/celery
.
- В
celery.py
мы установилиdjangoConf
, указывающий на главныйsettings.py
.
При запуске Celery пытается коснуться django-logfile и - не имея на это прав - возвращает ошибку:
Обходной путь: изменить права доступа к файлу журнала, который принадлежит пользователю django, так, чтобы пользователь celery мог писать в него. Но поскольку мы используем вращающийся логгер, это поможет только до создания следующего лог-файла.
Решения, которые мы придумали:
- Изменение прав доступа к файлу каждый раз, когда создается новый лог-файл: вероятно, худший способ решения этой проблемы .
- Использование одного и того же пользователя для django- и celery-процессов: пахнет как последнее средство .
- Создание специфической run-конфигурации в
settings.py
, перезаписывающей обработчики логирования, как например:
class CeleryProd(Prod):
def __init__(self) -> None:
super().__init__()
self.LOGGING['handlers']={}
Но почему-то каждое из этих решений кажется мне обходным путем. Должен же быть способ сделать это правильно, я думаю? Каков правильный способ сделать это - если он вообще существует?