2014-04-09 24 views
5

Seconda modifica: Dopo un po 'di scavo, la domanda è cambiata da come registrare un'eccezione con variabili locali su come impedire a sedici di inviare il secondo messaggio di registro che non ha le vars locali. Dopo il tentativo di seguito, ho notato che ricevevo sempre 2 email, una con vars locali per frame e l'altra senza.Come impedire la registrazione di eccezioni duplicate da un'attività di sedano

Prima Edit: Sono riuscito a ottenere una sorta di variabili locali, con l'aggiunta di un costume on_failure di override (usando annotations per tutte le attività in questo modo:

def include_f_locals(self, exc, task_id, args, kwargs, einfo): 
    import logging 
    logger = logging.getLogger('celery') 
    logger.error(exc, exc_info=einfo) 

CELERY_ANNOTATIONS = {'*': {'on_failure': include_f_locals}} 

Ma il problema ora è che il errore arriva 3 volte, una volta attraverso il registratore di sedano e due volte attraverso root (anche se non sono di moltiplicazione logger 'sedano' nelle mie impostazioni di registrazione)

domanda originale: ho un progetto Django/sedano a wh di recente ho aggiunto un gestore di sentinelle come root logger con livello 'ERROR'. Questo funziona bene per la maggior parte degli errori e delle eccezioni che si verificano nel django, ad eccezione di quelli provenienti dai lavoratori del sedano.

Quello che succede è che la sentinella riceve un'eccezione con il traceback e la gente del demone, ma non include lo f_locals (vars locali) di ciascun fotogramma nello stack. E questi appaiono nelle normali eccezioni python/django.

Immagino che potrei provare a catturare tutte le eccezioni e accedere manualmente con exc_info. Ma questo non è l'ideale.

risposta

0

Abbastanza divertente, tutti i miei problemi sono andati via quando ho semplicemente aggiornato raven a una versione successiva alla 5.0 (in particolare dopo 5.1).

Mentre io non sono sicuro che cambia eccezioni dovute essere registrato correttamente (con f_locals appaiono correttamente in sentinella), ma resta il fatto che Raven < 5.0 non ha funzionato per me.

Inoltre, non c'è bisogno di fare fantasia CELERY_ANNOTATIONS legwork (come sopra), la semplice definizione del gestore di sentinella per il logger corretto sembra essere sufficiente per rilevare eccezioni, oltre al messaggio di altri livelli di registrazione.

+0

vedere il problema relativo ai locali di registrazione e alla registrazione duplicata [qui] (https://github.com/getsentry/raven-python/issues/427) – tutuDajuju