芹菜日志记录:在任务内部和外部记录的一致方式



我正在运行一个执行函数的 Celery 任务。 此函数生成一些日志记录信息。 使用get_task_logger记录器,我可以将日志记录信息打印到芹菜标准输出。

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(use_celery_logger=None):
    if use_celery_logger:
        logger = get_task_logger(__name__)
    else:
        logger = logging.getLogger(__name__)
    logger.debug("SOME OUTPUT HERE")

并在您的芹菜任务中将其称为

my_func_called_inside_a_task(use_celery_logger=True)

对于正常的日志记录,您可以按原样调用它

my_func_called_inside_a_task()

最新更新