Celery Logging:在任务内部和外部进行日志记录的一致方式
Celery Logging: consistent way to log inside and outside of a task
我是 运行 一个执行函数的 Celery 任务。此函数生成一些日志信息。使用 get_task_logger 记录器,我可以将日志记录信息打印到 Celery stdout。
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")
总结:
如果我从 celery 任务调用函数,我希望它记录到 celery worker stdout。如果我从正常的 Python 提示符调用该函数,它将使用正常的 Python 记录器。任何帮助深表感谢。
您可以将可选参数传递给该函数。
import logging
from celery.utils.log import get_task_logger
def my_func_called_inside_a_task(use_celery_logger=None):
if use_celery_logger:
logger = get_task_logger(__name__)
else:
logger = logging.getLogger(__name__)
logger.debug("SOME OUTPUT HERE")
并在你的 celery 任务中将其称为
my_func_called_inside_a_task(use_celery_logger=True)
对于正常的日志记录,您可以按原样调用它
my_func_called_inside_a_task()
我是 运行 一个执行函数的 Celery 任务。此函数生成一些日志信息。使用 get_task_logger 记录器,我可以将日志记录信息打印到 Celery stdout。
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")
总结: 如果我从 celery 任务调用函数,我希望它记录到 celery worker stdout。如果我从正常的 Python 提示符调用该函数,它将使用正常的 Python 记录器。任何帮助深表感谢。
您可以将可选参数传递给该函数。
import logging
from celery.utils.log import get_task_logger
def my_func_called_inside_a_task(use_celery_logger=None):
if use_celery_logger:
logger = get_task_logger(__name__)
else:
logger = logging.getLogger(__name__)
logger.debug("SOME OUTPUT HERE")
并在你的 celery 任务中将其称为
my_func_called_inside_a_task(use_celery_logger=True)
对于正常的日志记录,您可以按原样调用它
my_func_called_inside_a_task()