用 Celery 构造日志

问题描述 投票:0回答:1

我有一个可用的芹菜应用程序。我想为其添加结构化日志记录。

很难提供完整的工作示例,所以让我演示一下:

import structlog
import logging

logging.config.dictConfig(...)
structlog.configure(...)

app = Celery()

然后,在某些任务中:

logger = structlog.getLogger()

logger.info("Foo")

在这个应用程序中,当有日志外部 Celery 任务时,它们会以 JSON 格式打印 - 就像我想要的那样。然而,来自 Celery 任务的每个日志都有:

[2024-04-25 20:37:14,305: INFO/ForkPoolWorker-2] {...}
[2024-04-25 20:37:14,305: INFO/MainProcess] {...}

前缀。而且这些日志没有应该位于此处的键(由于我的日志记录配置),因此这表明日志记录未在 Celery 任务内“配置”。

我的问题是:如何让 Celery 任务按照我想要的方式记录?我可以将这两个

logging.config.dictConfig
structlog.configure
调用移动到一个单独的函数(比如说
initialize_logging
)并将其作为参数或其他内容添加到 Celery 中,以便它在每个任务或类似任务开始时执行它吗?

python celery structlog
1个回答
0
投票

毫无疑问,我已经匆忙提出了这个问题。有一个简单的答案,Celery 为此目的提供了一个信号:setup_logging

© www.soinside.com 2019 - 2024. All rights reserved.