首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用python/celery/rabbitMQ进行日志记录

用python/celery/rabbitMQ进行日志记录
EN

Stack Overflow用户
提问于 2017-04-05 19:06:28
回答 1查看 1.2K关注 0票数 0

我正在寻找最好的方法来跟踪我的员工和队列,我正在查看日志记录。

我在芹菜文献中看到了建议设置日志的示例,如下所示:

代码语言:javascript
复制
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函数中的信息吗?

日志文件是否存储由工作人员返回的结果,还是这是单独的?

EN

回答 1

Stack Overflow用户

发布于 2017-04-08 15:55:19

日志文件到哪里去?

如我所见,你没有任何FileHandlers。这意味着记录器向控制台写入消息。

我们去查查。这里是tasks.py的示例:

代码语言:javascript
复制
# 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)和检查控制台。你会看到这样的事情:

代码语言:javascript
复制
[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

代码语言:javascript
复制
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)。内容示例:

代码语言:javascript
复制
2017-04-08 18:35:02,052 - tasks - INFO - Adding 1 + 2
...

是否存储由工作人员返回的结果?

默认情况下,只需将信息打印到控制台。但是您可以使用信号、自定义任务/加载器类注册特定的记录器、处理程序和自定义行为。

此外,您还可以在运行-f LOGFILE, --logfile=LOGFILE时设置Celery参数。

希望这能有所帮助。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43239636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档