2017-04-05 62 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说法。

希望这会有所帮助。