Проблема
Есть сервис на DRF, в котором есть некоторое приложение А. В этом приложении есть файл
tasks.py
с задачами для celery-воркеров. Изначально этот файл был на 500+ строк кода, поэтому я решил декомпонизировать код и разбить его на функции и классы. Все это я перенес в папку
services.
Но теперь у меня появилась проблема: в этих самых функциях и классах есть места, где мне нужно логировать происходящее. Т.е. получается ситуация, что мне нужно, чтобы логгеры в файле
tasks.py
и во всех файлах в папке
services
ссылались на один регистратор, который пишет логи в файл с их ротацией.
Собственно, в этом вся проблема.
Что я пробовал
- Создать папку
tasks
, в которой было три файла: __init__.py
, tasks.py
и tasks_utils.py
. В task_utils.py
и были бы все функции и классы, которые я вынес из tasks.py
. В __init__.py
я создал логгер через logging.getLogger(__name__)
, который затем импортировал в tasks.py
и tasks_utils.py
. Но тут появлялась другая проблема - я не знаю, как в таком случае сообщить celery, как искать задачи. Изначально он ищет в папках приложений в файлах tasks.py
. Регистрировать вручную каждую таску, привязывая ее к определенному экземпляру Celery, мне показалось костыльным способом. Тем более, что у меня все таски - shared_task.
- Пробовал топорно в каждом файле прописывать
logging.getLogger(__name__)
, и в файле settings.py
прописывать кучу регистраторов, но это точно костыль. Да и в таком случае логи теряют контекст, что очень плохо.
- Пробовал просто ничего не логировать в функциях и классах, которые находятся в папке
services
и которые используются в tasks.py
, а просто выкидывать исключения с сообщением об ошибке, но тут появилось сразу 2 проблемы: во-первых, как быть, если мне нужно записать сообщение INFO-уровня, а во-вторых, опять же кажется очень костыльным то, что функция/класс постоянно будут поднимать ошибки...
Я новичок в логировании, поэтому чувствую, что не понимаю какие-то принципов, оттого и задаюсь таким большим количеством глупых вопросов.