来自 celery.utils.log 的获取记录器函数和日志记录有什么不同?

What is the different between the get logger functions from celery.utils.log and logging?

我一直在试图找出 python 记录器和芹菜记录器之间的区别,特别是下面命令之间的区别,但找不到好的答案。

我正在使用 celery v3 和 django 1.10。

from celery.utils.log import get_task_logger
logger = get_logger(__name__)
...
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
...
import logging
logger = logging.get_logger(__name__)

celery 文档 (latest, v3.1) 非常缺乏关于这个主题的内容。 我看过类似的问题,例如this one,但仍然不清楚使用哪个,为什么使用那个,具体有什么区别。我正在寻找一个清晰、简洁的答案。

我也在我的生产环境中使用哨兵。这个选择如何影响你的哨兵日志?即 these 常用设置

根据使用 get_task_logger 的经验,您似乎得到了一些重要的东西,尤其是使用 Sentry 时。

  • 自动将任务名称添加到您的日志输出中
  • 能够在比模块更高的级别设置日志处理规则(我相信 实际上 将记录器名称设置为 celery.task
  • 可能,对于 Sentry 设置最重要的是,它是否将日志记录挂钩到 Sentry 使用的日志处理程序中。

重要: 有一个 bit of extra config 需要进入 Sentry 的 Celery 注册:

https://docs.sentry.io/clients/python/integrations/celery/

如果不进行某些设置,您可能会导致错误流入 Sentry,但我认为这将为您提供最好的跟踪和详细信息 + 确保通过 throws 声明的预期异常之类的东西是正确的忽略。