【问题标题】:What is the different between the get logger functions from celery.utils.log and logging?celery.utils.log 中的 get logger 函数和 logging 有什么区别?
【发布时间】:2017-09-04 04:54:19
【问题描述】:

我一直在试图弄清楚python logger和celery logger之间的区别,特别是下面命令之间的区别,但找不到一个好的答案。

我正在使用 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 文档(latestv3.1)在这个主题上非常缺乏。 我看过类似的问题,例如this one,但仍然不清楚使用哪个,为什么使用那个,特别是有什么区别。我正在寻找一个清晰、简洁的答案。

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

【问题讨论】:

    标签: python django logging celery


    【解决方案1】:

    从使用 get_task_logger 的经验来看,似乎可以让您了解一些重要的事情,尤其是使用 Sentry。

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

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

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

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

    【讨论】:

    • 这很有帮助。在我接受之前,我要测试一下。你知道任务中调用的函数中的记录器(即 util 函数、管理器函数等)是否也具有此属性?我的印象是没有,除非它们也被 get_task_logger 调用。
    • 当我使用 get_task_logger 时,我需要在我的配置中添加类似 'celery.task': { 'level': 'INFO', 'handlers': ['console', 'sentry'], 'propagate': False, }, 的内容?
    • @jmerkow "你知道任务中调用的函数中的记录器(即 util 函数、管理器函数等)是否也有这个属性?"好问题。根据我在 Sentry 中看到的情况,看起来从堆栈报告到他们正在使用的记录器的函数,尽管它们确实使 Sentry 与在正常执行中捕获相同的条目相比,它们在上下文中有些缺乏。我也可以说,我们的记录器中没有对celery.task 的任何特殊处理。这个设置让事情顺利进行:docs.sentry.io/clients/python/integrations/celery
    • @jmerkow 结合上述 celery 配置,添加 sentry 作为根处理程序似乎就足够了:gist.github.com/kcolton/a4a7ef2c2a77fd0872efe0323d190779
    猜你喜欢
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2014-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多