2015-06-11 38 views
4

我正在运行一个执行函数的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脚本(不使用芹菜),并登录到,例如,标准输出。通常情况下,我可能会做一些这样的:

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记录器。任何帮助深表感谢。

+0

[芹菜中使用Python标准日志]中可能重复(http://stackoverflow.com/questions/6940987/use-python-standard-logging-in-celery) – scytale

回答

4

您可以将可选参数传递给该函数。

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() 
+0

谢谢。我最终使用了这种方法的变体。 –