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()
?
Probabilmente tramite una correzione in biliardo, vedere https://github.com/celery/celery/issues/1404. –