gpt4 book ai didi

python - Celery 任务不会就记录器关键消息向管理员发送电子邮件

转载 作者:行者123 更新时间:2023-12-03 09:11:05 28 4
gpt4 key购买 nike

每次调用 logger.critical 时,我的 celery 任务都不会向应用程序管理员发送电子邮件。

我正在构建一个 Django 应用程序。我的项目的当前配置允许应用程序管理员在每次创建 logger.critical 消息时收到一封电子邮件。这是非常直接的设置,我只是按照两个项目( celery 和 Django)的文档进行操作。出于某种原因,我没有弄清楚,在 celery 任务中运行的代码没有相同的行为,它不会在每次创建 logger.critical 消息时向应用程序管理员发送电子邮件。

celery 实际上甚至允许这样做吗?
我错过了一些配置吗?
有没有人遇到这个问题并且能够解决它?

使用:

  • Django 1.11
  • celery 4.3

  • 谢谢你的帮助。

    最佳答案

    正如文档中所述,Celery 会覆盖当前的日志配置以应用它自己的配置,它还说您可以设置 CELERYD_HIJACK_ROOT_LOGGERFalse在您的 Django 设置中,为了防止这种行为,没有很好的记录是目前这并没有真正起作用。

    在我看来,您有两种选择:

    1. 使用 setup_logging 防止 Celery 覆盖您的配置(真的)信号

    打开您的 celery.py文件并添加以下内容:

    from celery.signals import setup_logging

    @setup_logging.connect
    def config_loggers(*args, **kwags):
    pass

    之后你的文件应该或多或少是这样的:

    from __future__ import absolute_import, unicode_literals
    import os
    from celery import Celery
    from celery.signals import setup_logging

    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

    app = Celery('myproject')
    app.config_from_object('django.conf:settings', namespace='CELERY')
    app.autodiscover_tasks()

    @setup_logging.connect
    def config_loggers(*args, **kwags):
    pass

    然而除非您有充分的理由,否则我会避免使用此选项,因为这样您将丢失由 Celery 处理的默认任务日志记录,这是非常好的。

    2. 使用特定的记录器

    您可以在 Django LOGGING 中定义自定义记录器配置并在您的任务中使用它,例如:

    Django 设置:

    LOGGING = {
    # ... other configs ...
    'handlers': {
    'my_email_handler': {
    # ... handler configuration ...
    },
    },
    'loggers': {
    # ... other loggers ...
    'my_custom_logger': {
    'handlers': ['my_email_handler'],
    'level': 'CRITICAL',
    'propagate': True,
    },
    },
    }

    任务:

    import logging

    logger = logging.getLogger('my_custom_logger')

    @shared_task
    def log():
    logger.critical('Something bad happened!')

    我相信这对您来说是最好的方法,因为据我所知,您需要手动记录消息,这使您可以继续使用 Celery 日志记录系统。

    关于python - Celery 任务不会就记录器关键消息向管理员发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58480855/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com