【问题标题】:Celery tasks using specific sentry logger not working使用特定哨兵记录器的芹菜任务不起作用
【发布时间】:2018-01-21 15:42:39
【问题描述】:

按照 celery 集成的哨兵示例并使用特定记录器无法正常工作,因为哨兵正在接收任何错误或任何记录器。 无论如何要控制记录器发送到哨兵?

import logging
import celery
import raven
from raven.contrib.celery import register_signal, register_logger_signal
sentry_logger = logging.getLogger("logger_for_sentry")

class Celery(celery.Celery):

    def on_configure(self):
        client = raven.Client('https://<key>:<secret>@sentry.io/<project>')

        # register a custom filter to filter out duplicate logs
        register_logger_signal(client, logger=sentry_logger)

        # hook into the Celery error handler
        register_signal(client)

app = Celery(__name__)
app.config_from_object('django.conf:settings')

这些是我的日志记录设置,当我在 web 上跟踪 my_logger1 时,它按预期工作并且没有发送到哨兵,但是在 celery 中它被发送

LOGGING = {
     ...
    'loggers': {
        'sentry_logger': {
            'handlers': ['console', 'sentry'],
            'level': 'INFO',
            'propagate': True,
        },
        'my_logger1': {
            'handlers': ['console'],
            'level': 'INFO',
            'propagate': True
        },
        'sentry': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
        },
        'sentry.errors': {
            'level': 'ERROR',
            'filters': ['require_debug_false'],
            'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
        },    
    }
}

【问题讨论】:

  • 我的哨兵工作正常,所有记录器不仅是我在 register_logger_signal 中指定的记录器。这就是我想要的
  • 请在 django 设置中显示您的 LOGGING 变量
  • 添加了LOGGING设置

标签: python django logging celery sentry


【解决方案1】:

在您的 django 日志记录设置中设置 celery 记录器,如下所示:

LOGGING = {
    # ...
    'loggers': {
        # ...
        'celery': {
            'level': 'WARNING',
            'propagate': False,
            'handlers': ['console'],  # use only console for celery
        },
    }
}

在你的celery.py:

import os
from celery import Celery

# set your real settings module instead `apps.settings`
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'apps.settings')  

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

【讨论】:

  • 我已经用哨兵处理程序配置了一个记录器,问题是芹菜正在向你发送哨兵其他记录器而不是哨兵处理程序,这就是我要具体说明的内容
  • @JuanMadurga 感谢您的解释 :) 我更新了答案,请检查
  • @AntonShurasov 我仍然在哨兵中接收其他记录器,而不仅仅是配置的register_logger_signal(client, logger=sentry_logger)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 2016-04-24
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
相关资源
最近更新 更多