2013-04-16 20 views
8

Il celery 3.x docs on logging consiglia di impostare il logger compito in questo modo:Quale argomento si passa alla funzione get_task_logger() di sedano?

from celery.utils.log import get_task_logger 
logger = get_task_logger(__name__) 

Quando lo faccio, CELERYD_TASK_LOG_FORMAT viene ignorato e le dichiarazioni di registro uso CELERYD_LOG_FORMAT invece, dove non può fare uso di %(task_name)s e %(task_id)s.

Il mio compito è in un modulo tasks nella mia app myapp. Pertanto, __name__ è myapp.tasks.

Suppongo che il problema sono queste righe nel celery/utils/log.py:

def get_task_logger(name): 
    logger = get_logger(name) 
    if logger.parent is logging.root: 
     logger.parent = task_logger 
    return logger 

Quindi, per qualsiasi motivo, il modulo passato a get_task_logger() deve essere un primo modulo di livello, altrimenti il ​​registratore compito non è collegato. Non c'è nessun commento che spieghi perché questo deve essere il caso (e non riesco a pensare ad alcun motivo per cui si dovrebbe aggiungere questa restrizione, davvero). __name__ non funziona perché fa riferimento a un modulo di secondo livello.

Sto commettendo un errore o i documenti sono sbagliati? Se sì, cosa dovrei passare a get_task_logger()?

risposta

2

A partire dal 2014-10-05, questo non è più il caso. Passare a __name__ ora sembra funzionare correttamente (current implementation).

Ricorda che i logger di attività saranno ancora forzati ad ereditare da celery.task. Il logger principale celery non si propaga per impostazione predefinita nel registro root, quindi è possibile definire un logger per celery.task nella configurazione di registrazione.

+0

Probabilmente tramite una correzione in biliardo, vedere https://github.com/celery/celery/issues/1404. –

Problemi correlati