2015-06-11 79 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

謝謝。我最終使用了這種方法的變體。 –