Я пытаюсь запустить простую асинхронную задачу, используя celery и rabbitmq в качестве посредника сообщений.Я хочу сгенерировать и записать журналы сельдерея, которые появляются в терминале, в файл программным способом.
У меня есть файл задачи, в котором я определил свою задачу, файл приложения, из которого я вызываю эту задачу для выполнения, а также я настроил и импортировал логирование для всех файлов.Я пытаюсь импортировать объект ведения журнала, который я создал в своей конфигурации ведения журнала, в мою задачу Celery, но по какой-то причине он не генерирует журналы.Я также попробовал с консоли команду -f LOGFILE, --logfile = LOGFILE, которая генерирует файл журнала при нажатии, но я хочу сгенерировать его программно так, как это происходит при обычной регистрации.Я использовал эту команду для запуска своего сельдерея, который генерирует журналы в консоли, откуда я ее запускаю - сельдерей -A taskhandler.celery_app работник -l информация -E --concurrency = 1.Celery не может прочитать и обработать мой объект журнала для проекта и сгенерировать журналы по указанному мною пути.Я также попробовал это: https://www.distributedpython.com/2018/08/28/celery-logging/ http://docs.celeryproject.org/en/latest/userguide/tasks.html#logging
Но я не нашел никакого решения.
import time
from celery.utils.log import get_task_logger
from log import Logger
from taskhandler.celery_app import celery
#logger = get_task_logger(__name__)
logger = Logger.get_logger()
@celery.task(task_ignore_result=False, track_started=True)
def train_global_trepan_task(count):
factor = 1
for i in range(1, count + 1):
factor = factor * i
time.sleep(5)
logger.info("Task id {} factorial of {} is {}".format(train_global_trepan_task.request.id, i, factor))
return factor
Ниже приведена настройка ведения журнала
import logging
from datetime import date
from configuration import get_config
import sys
sys.path.append("..")
class Logger:
_logger = None
@classmethod
def get_logger(cls):
name = 'logs//' + date.today().strftime("%b-%d-%Y") + '.log'
if not cls._logger or name != cls._logger.__dict__['name']:
logging.basicConfig(filename=name,
filemode='a',
format='%(asctime)s [%(filename)s - %(lineno)s] -%(funcName)s - %(levelname)s - %('
'message)s')
cls._logger = logging.getLogger(name)
log_level = {
'debug': logging.DEBUG,
'info': logging.INFO,
'error': logging.ERROR,
'warning': logging.WARNING,
'critical': logging.CRITICAL,
}[get_config('logger', 'level').lower()]
cls._logger.setLevel(log_level)
return cls._logger
Ожидаемые результаты: журналы Celery должны были быть сгенерированы в моей папке журналов, по указанному пути.Фактические результаты: журналы Celery не генерируются в моем файле журнала программно, они генерируются в файле только тогда, когда мы даем команду celery log в нашей консоли, и это тоже не соответствует действительности.