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