2014-12-18 3 views
11

현재 장고 기반 프로젝트에서 셀러리 작업을하고 있습니다. documentation에 설명 된대로 모든 잡히지 않은 예외 및 로그 메시지를 Sentry에 보내도록 레이븐을 구성했습니다.샐러리 작업이 센트리에 전송되지 않는 캐치 예외

셀러리 작업 내에서 잡히지 않는 예외를 제외하면 모든 것이 잘 작동합니다. 나는이 작업을 실행하는 경우 예를 들어, :

@app.task 
def test_logging(): 
    log.error('Testing logging inside a task') 
    raise IndexError('Testing exception inside a task') 

난 단지 센트리에 log.error(...) 아니라 IndexError 캐치되지 않는 예외를 참조하십시오. log.exception(...)이있는 예외 주위에서 try-except 블록을 사용하려고 시도했지만 제대로 작동했지만이 경우 모든 예외를 catch 할 수있는 확장 성이 없다고 생각합니다.

그래서 문제는 어떻게 든 제대로 처리되지 않는 캐치되지 않은 예외입니다.

이 내 현재 패키지 버전은 다음과 같습니다

celery (3.1.17) 
raven (5.1.1) 
Django (1.7.1) 

당신이 내게 어떤 방향으로 이동하는 데 도움이겠습니까?

시간 내 주셔서 감사합니다.

거기 주석에 DRC에 의해 설명 된 바와 같이
+0

이미 http://raven.readthedocs.org/en/latest/integrations/celery.html 및 http://docs.celeryproject.org/en/latest/configuration.html#celeryd-hijack-root를 시도해 보셨습니까? - 로거? – DRC

+1

감사합니다. DRC, 마침내'register_signal (client) '을 사용하는 솔루션이 작동했습니다. 이제는 Sentry에 제대로 기록되지 않은 예외가 기록됩니다. 건배! –

+0

도움이 되니 기쁩니다. – DRC

답변

15

, 우리는 마침내이 방법을 사용하여 솔루션에 도착 : https://docs.getsentry.com/hosted/clients/python/integrations/celery/

기본적으로이 일을 : 당신의 시간을

import celery 

class Celery(celery.Celery): 

    def on_configure(self): 
     if hasattr(settings, 'RAVEN_CONFIG') and settings.RAVEN_CONFIG['dsn']: 
      import raven 
      from raven.contrib.celery import (register_signal, 
               register_logger_signal) 

      client = raven.Client(settings.RAVEN_CONFIG['dsn']) 
      register_logger_signal(client) 
      register_signal(client) 


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

감사합니다.

+0

셀러리가 읽을 수 있도록이 파일을 어떤 파일에 기록합니까? – jperelli

+1

셀러리 설정이있는'celery.py' 모듈이 있습니다. 그런 다음 그 구성을 다른 모듈'tasks.py'에서 가져옵니다. 여기서 모든 작업을 정의했습니다. –