SORU
31 Mayıs 2011, Salı


Tek bir dosya için tüm kereviz görevleri günlük mesaj gönder

Ne daha fazla, belirli bir oturum açma sistemi kurulumu için merak ediyorum. Tüm Görevlerim kullanın

logger = logging.getLogger(__name__)

modül-geniş bir kaydedici gibi.

Kereviz "celeryd.oturum açmak istiyorum"ve "görevler.Görevlerim günlük"ama bu çalışma almak için nasıl hiçbir fikrim yok. günlük Django-kereviz tüm yol olabilir CELERYD_LOG_FILE kullanarak ilgili mesajları celeryd için celeryd.ama günlük mesaj Görevlerim oluşturulan eser yoktur günlük.

CEVAP
31 Mayıs 2011, Salı


Not: Bu cevap Kereviz sen şimdi get_task_logger() başına görev logger senin kurmak için kullandığı 3.0, kadar eskidir. Ayrıntılar için the Logging section of the What's new in Celery 3.0 document bakın lütfen.


Kereviz, görev başına günlüğü için destek adamıştır. Task documentation on the subject:

İşçiler logger işçi günlüğüne tanı çıkış eklemek için kullanabilirsiniz:

@celery.task()
def add(x, y):
    logger = add.get_logger()
    logger.info("Adding %s   %s" % (x, y))
    return x   y

Birkaç günlük düzeyleri vardır, ve işçi loglevel ayarını karar verir ya da yazılı olacak olup olmadığını günlük dosyası.

Tabii ki, aynı zamanda sadece bir şey/-hata dışında standart yazılır baskı kullanabilirsiniz günlük dosyası olarak yazılır.

Bu başlık altında bu tüm hala standart python modülü günlüğü. Yanlış CELERY_HIJACK_ROOT_LOGGER option kendi günlük kurulum çalışması için ayarlayabilirsiniz, aksi takdirde Kereviz sizin için işleme yapılandırır.

Ancak, görevleri için .get_logger() Ara tek tek görev başına ayrı bir günlük dosyası için izin vermez. Sadece logfile bir değişken geçmek ve ayrı dosya için günlük iletileri yönlendirmek olacak:

@celery.task()
def add(x, y):
    logger = add.get_logger(logfile='tasks.log')
    logger.info("Adding %s   %s" % (x, y))
    return x   y 

Son ama en az değil, sadece python logging module üst düzey paketi yapılandırmak ve kendi dosya işleyicisi verebilirsiniz. celery.signals.after_setup_task_logger sinyal kullanarak bu seti istiyorum; burada tüm modülleri bir paketi foo.tasks adı canlı (foo.tasks.email foo.tasks.scaling) varsayıyorum:

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)

Şimdi herhangi bir logger kimin adı ile başlar foo.tasks tüm bu mesajlar gönderdi tasks.log yerine kök logger (olan yok mü bu mesajları çünkü .propagate False).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • natescamp

    natescamp

    30 NİSAN 2009
  • NCIX Tech Tips

    NCIX Tech Ti

    2 Ocak 2007
  • TheXiaxue

    TheXiaxue

    3 AĞUSTOS 2009