Note: Cette réponse est obsolète comme de Céleri 3.0, lorsque vous utilisez maintenant get_task_logger()
pour obtenir votre par tâche enregistreur de configurer. Veuillez voir la section enregistrement des nouveautés dans le Céleri 3.0 document pour plus de détails.
Le céleri a support dédié pour l'enregistrement, par la tâche. Voir la documentation des Tâches sur le sujet:
Vous pouvez utiliser les travailleurs enregistreur pour ajouter de sortie de diagnostic pour le travailleur journal:
@celery.task()
def add(x, y):
logger = add.get_logger()
logger.info("Adding %s + %s" % (x, y))
return x + y
Il y a plusieurs niveaux de journalisation disponibles, et les travailleurs loglevel réglage décide
si oui ou non ils seront écrites dans le fichier journal.
Bien sûr, vous pouvez aussi simplement utiliser l'impression que ce qui est écrit dans la norme/-err sera
écrites dans le fichier journal.
Sous le capot, ce n'est pas le standard de python module de journalisation. Vous pouvez définir l' CELERY_HIJACK_ROOT_LOGGER
option à False pour permettre à votre propre configuration de la journalisation de travail, sinon, le Céleri permettra de configurer le traitement pour vous.
Toutefois, pour les tâches, l' .get_logger()
appel ne permet de mettre en place un fichier journal distinct par la tâche. Il suffit de passer un logfile
argument et il va s'en route les messages de log que fichier séparé:
@celery.task()
def add(x, y):
logger = add.get_logger(logfile='tasks.log')
logger.info("Adding %s + %s" % (x, y))
return x + y
Dernier mais non le moindre, vous pouvez configurer votre package de niveau supérieur dans le python module de journalisation et de lui donner un gestionnaire de fichier propre. J'avais mis cela à l'aide de l' celery.signals.after_setup_task_logger
du signal; ici, je suppose que tous vos modules de vivre dans un package nommé foo.tasks
(comme en foo.tasks.email
et foo.tasks.scaling
):
from celery.signals import after_setup_task_logger
import logging
def foo_tasks_setup_logging(**kw):
logger = logging.getLogger('foo.tasks')
if not logger.handlers:
handler = logging.FileHandler('tasks.log')
formatter = logging.Formatter(logging.BASIC_FORMAT) # you may want to customize this.
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.propagate = False
after_setup_task_logger.connect(foo_tasks_setup_logging)
Maintenant, n'importe quel enregistreur dont le nom commence par foo.tasks
aura tous les messages envoyés à l' tasks.log
, au lieu de la racine de l'exploitant (ce qui ne veut pas voir l'un de ces messages, car .propagate
est Faux).