Сельскохозяйственная лесозаготовка: постоянный способ входа в систему и за ее пределами

Я выполняю задачу Celery, которая выполняет функцию. Эта функция генерирует некоторую информацию о регистрации. Используя регистратор get_task_logger, я могу распечатать информацию о регистрации на центральном уровне Celery.

from celery.utils.log import get_task_logger logger = get_task_logger(__name__) def my_func_called_inside_a_task(): logger.debug("SOME OUTPUT HERE") 

Тем не менее, я также хочу импортировать эту функцию как обычный скрипт python (не используя Celery) и записывать, например, в stdout. Обычно я могу сделать что-то вроде следующего:

 import logging logger = logging.getLogger(__name__) def my_func_called_inside_a_task(): logger.debug("SOME OUTPUT HERE") 

Как объединить оба подхода, поэтому мне не нужно делать что-то избыточное, как показано ниже?

 import logging from celery.utils.log import get_task_logger logger = logging.getLogger(__name__) logger_celery = get_task_logger(__name__) def my_func_called_inside_a_task(): logger.debug("SOME OUTPUT HERE") logger_celery.debug("SOME OUTPUT HERE") 

Реферат: Если я вызову функцию из задачи сельдерея, я бы хотел, чтобы она регистрировалась на рабочем столе сельдерея. Если я вызову функцию из обычной подсказки Python, она будет использовать обычный регистратор Python. Буду признателен за любую оказанную помощь.

Вы можете передать необязательный аргумент этой функции.

 import logging from celery.utils.log import get_task_logger def my_func_called_inside_a_task(celery_callback=None): if celery_callback: logger = get_task_logger(__name__) else: logger = logging.getLogger(__name__) logger.debug("SOME OUTPUT HERE") 

и в вашей задаче сельдерея назовите это как

 my_func_called_inside_a_task(celery_callback=True) 

и для обычного ведения журнала вы можете назвать это так, как это

 my_func_called_inside_a_task()