gpt4 book ai didi

django - 当根记录器配置为使用 raven 时,Celery 定期任务不会运行

转载 作者:行者123 更新时间:2023-12-02 11:44:44 24 4
gpt4 key购买 nike

我使用 DjangoCelery 来执行定期任务,并使用 Raven 作为 Sentry 客户端。

到目前为止,我已经成功地使用 celerybeat 运行了多个应用程序,并且一切正常。

由于某种原因,在我最近开发的一个应用程序中,当我将根记录器设置为使用' Sentry '处理程序时,定期任务未运行。

当将根记录器设置为仅使用'console'处理程序时,它确实有效。

我无法理解导致此问题的原因。

这是我的日志字典:

LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'root': {
'level': os.environ.get('LOG_LEVEL','INFO'),
'handlers': ['console'],
},
'filters': {
'require_debug_false': {
'()': 'django.utils.log.RequireDebugFalse'
}
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['require_debug_false'],
'class': 'django.utils.log.AdminEmailHandler'
},
'sentry': {
'level': 'WARNING',
'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
},
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
'raven': {
'level': 'WARNING',
'handlers': ['console','sentry'],
'propagate': True,
},
'celery': {
'handlers': ['console'],
'level': 'DEBUG',
},
}

}

以及控制根记录器处理程序的环境变量:

    ENABLE_SENTRY = os.environ.get('ENABLE_SENTRY', 'FALSE') == 'TRUE'
if (ENABLE_SENTRY):
LOGGING['root']['handlers'] = ['console','sentry']

注意:似乎根记录器在更改后不会登录到控制台

这就是我运行 celerybeat 和worker的方式:

python manage.py celery worker -E -B --maxtasksperchild=1000 --concurrency=10 --loglevel=DEBUG -Ofair

这是我正在使用的软件包的一部分:

celery==3.1.17 django-celery==3.1.16 raven==5.0.0 Django==1.8.7

这是我的 celery.py 文件:

"""
This module will hold celery configuration
"""
from __future__ import absolute_import
from django.conf import settings
import os
from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'ltg_backend_app.settings')

# init the celery app
app = Celery('ltg_backend_app')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

任何帮助将不胜感激!

最佳答案

您是否配置了 raven 来捕获与 Celery 一起工作所需的必要信号?这是我配置 Celery 应用程序的方法:

import celery
from django.conf import settings

import raven
from raven.contrib.celery import register_signal, register_logger_signal


class Celery(celery.Celery):
def on_configure(self):
#
# https://docs.sentry.io/clients/python/integrations/celery/
#
if 'dsn' in settings.RAVEN_CONFIG and settings.RAVEN_CONFIG['dsn']:
client = raven.Client(settings.RAVEN_CONFIG['dsn'])
else:
client = raven.Client() # should do nothing

# register a custom filter to filter out duplicate logs
register_logger_signal(client)

# hook into the Celery error handler
register_signal(client)

app = Celery('foobar')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

请参阅此处了解更多配置选项和详细信息:https://docs.sentry.io/clients/python/integrations/celery/

关于django - 当根记录器配置为使用 raven 时,Celery 定期任务不会运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36982613/

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