2017-04-05 78 views
0

我正在尋找追蹤我的工作人員和隊列的最佳方式,並且正在研究日誌記錄。使用python /芹菜/ rabbitMQ進行日誌記錄

我見過的celery documentation例子是建議設置日誌記錄如下:

from celery.utils.log import get_task_logger 
 

 
logger = get_task_logger(__name__) 
 

 
@app.task 
 
def add(x, y): 
 
    logger.info('Adding {0} + {1}'.format(x, y)) 
 
    return x + y

哪裏日誌文件去?還有什麼信息存儲在日誌文件中?它只是包含在logger.info函數中的信息?

日誌文件是否存儲工作人員返回的結果,還是單獨的?

回答

2

日誌文件在哪裏?

我可以看到你沒有任何FileHandlers。這意味着記錄器將消息寫入控制檯。

讓我們來檢查一下。 tasks.py這裏例如:

# celery 4.0.2 
@celery.task(name='add') 
def add(x, y): 
    logger.info('Adding {0} + {1}'.format(x, y)) 
    return x + y 


app = celery.Celery(
    __name__, 
    broker='redis://localhost:6379/0', 
    backend='redis://localhost:6379/0', 
) 

app.conf.beat_schedule = { 
    # run task each 2 seconds 
    'add-every-2-seconds': { 
     'task': 'add', 
     'schedule': 2.0, 
     'args': (1, 2) 
    }, 
} 

運行芹菜(celery worker -A tasks.app --loglevel=info --beat),檢查控制檯。你會看到類似的東西:

[2017-04-08 18:18:55,924: INFO/Beat] Scheduler: Sending due task add-every-2-seconds (add) 
[2017-04-08 18:18:55,930: INFO/MainProcess] Received task: add[44a6877c-84a2-4a26-815e-1f637fdf9c0c] 
[2017-04-08 18:18:55,932: INFO/PoolWorker-2] add[44a6877c-84a2-4a26-815e-1f637fdf9c0c]: Adding 1 + 2 
[2017-04-08 18:18:55,934: INFO/PoolWorker-2] Task add[44a6877c-84a2-4a26-815e-1f637fdf9c0c] succeeded in 0.00191404699945s: 3 
[2017-04-08 18:18:57,924: INFO/Beat] Scheduler: Sending due task add-every-2-seconds (add) 
[2017-04-08 18:18:57,928: INFO/MainProcess] Received task: add[c386d360-57d3-4352-8a89-f86bb2376e4e] 
[2017-04-08 18:18:57,930: INFO/PoolWorker-3] add[c386d360-57d3-4352-8a89-f86bb2376e4e]: Adding 1 + 2 
[2017-04-08 18:18:57,931: INFO/PoolWorker-3] Task add[c386d360-57d3-4352-8a89-f86bb2376e4e] succeeded in 0.00146738500007s: 3 

這意味着記錄器工作良好,並寫我們的消息。現在,讓我們嘗試添加FileHandler我們的任務:

logger = get_task_logger(__name__) 
task_handler = FileHandler('task.log') 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 

task_handler.setFormatter(formatter) 
logger.addHandler(task_handler) 

運行芹菜,並檢查文件夾中存儲tasks.py。您應該看到新文件(tasks.log)。內容實例:

2017-04-08 18:35:02,052 - tasks - INFO - Adding 1 + 2 
... 

是否日誌文件存儲由工人返回的結果?

默認情況下,信息只打印到控制檯。但是,你可以註冊特定的記錄器,處理器和使用signals,自定義任務/ Loader類行爲進行自定義。

而且運行Celery時,你可以設置-f LOGFILE, --logfile=LOGFILE說法。

希望這會有所幫助。