2013-09-25 16 views
7

私が働いているDjangoプロジェクトにCeleryをセットアップしました。私はセロリのログ(セロリ、セロリなど)の残りのセロリの仕事のログを分離したいと思います。Django Celery Task Logging

セロリの文書(http://docs.celeryproject.org/en/latest/userguide/tasks.html#logging)に基づいて、私はちょうどこれを行う必要がある 'celery.task'のためのDjangoのロガーを定義できるはずですね。しかし、私がこれを行うと、何もログに現れません。一般的な「セロリ」ロガーを作成すると、ロガーの名前と関係がある可能性があることを意味して、すべてが表示されます。

私はここで何が欠けていますか?この作業を行う方法はありますか、またはすべてのセロリのログをまとめておく必要がありますか?

CELERYD_HIJACK_ROOT_LOGGER = Falseを設定しました。 settings.pyで

マイログのセットアップ:

LOGGING = { 
    'version': 1, 
    'disable_existing_loggers': False, 
    'filters': { 
     'require_debug_false': { 
      '()': 'django.utils.log.RequireDebugFalse' 
     } 
    }, 
    'formatters': { 
     'standard': { 
      'format': '%(asctime)s %(levelname)s [%(name)s: %(lineno)s] -- %(message)s', 
      'datefmt': '%m-%d-%Y %H:%M:%S' 
     }, 
    }, 
    'handlers': { 
     'logfile': { 
      'level': 'INFO', 
      'filters': None, 
      'class': 'logging.handlers.RotatingFileHandler', 
      'filename': '/vagrant/logs/logfile.log', 
      'maxBytes': 1024*1024*5, 
      'backupCount': 3, 
      'formatter': 'standard' 
     }, 
     'debug_logfile': { 
      'level': 'DEBUG', 
      'filters': None, 
      'class': 'logging.handlers.RotatingFileHandler', 
      'filename': '/vagrant/logs/debug_logfile.log', 
      'maxBytes': 1024*1024*5, 
      'backupCount': 5, 
      'formatter': 'standard' 
     }, 
     'default_logger': { 
      'level': 'WARNING', 
      'filters': None, 
      'class': 'logging.handlers.RotatingFileHandler', 
      'filename': '/vagrant/logs/default.log', 
      'maxBytes': 1024*1024*5, 
      'backupCount': 2, 
      'formatter': 'standard' 
     }, 
     'celery_logger': { 
      'level': 'DEBUG', 
      'filters': None, 
      'class': 'logging.handlers.RotatingFileHandler', 
      'filename': '/vagrant/logs/celery.log', 
      'maxBytes': 1024*1024*5, 
      'backupCount': 2, 
      'formatter': 'standard' 
     }, 
     'celery_task_logger': { 
      'level': 'DEBUG', 
      'filters': None, 
      'class': 'logging.handlers.RotatingFileHandler', 
      'filename': '/vagrant/logs/celery_tasks.log', 
      'maxBytes': 1024*1024*5, 
      'backupCount': 2, 
      'formatter': 'standard' 
     }, 
    }, 
    'loggers': { 
     '': { 
      'handlers': ['default_logger'], 
      'level': 'WARNING', 
      'propagate': True, 
     }, 
     'django': { 
      'handlers': ['logfile'], 
      'level': 'INFO', 
      'propagate': True, 
     }, 
     'feedmanager': { 
      'handlers': ['logfile', 'debug_logfile'], 
      'level': 'DEBUG', 
      'propagate': True, 
     }, 
     'recipemanager': { 
      'handlers': ['logfile', 'debug_logfile'], 
      'level': 'DEBUG', 
      'propagate': True, 
     }, 
     'menumanager': { 
      'handlers': ['logfile', 'debug_logfile'], 
      'level': 'DEBUG', 
      'propagate': True, 
     }, 
     'celery.task': { 
      'handlers': ['celery_task_logger'], 
      'level': 'DEBUG', 
      'propagate': True, 
     }, 
     'celery': { 
      'handlers': ['celery_logger'], 
      'level': 'DEBUG', 
      'propagate': True, 
     }, 
    } 
} 
+0

celery.tasksまたはcelery.task – toad013

+1

おかげになりたいものになっていることを確認します - 私も続くかわかりません。私はcelery.taskのロガーを持っていて、セロリのタスクを試してみました。 – aravenel

答えて

15

私はあなたが、あなたのロガー名はモジュール名になりますことをやっている場合、あなたはこの

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

をやって、あなたの仕事に推測しています、あなたのタスクがMyAppという名前のアプリのtask.pyファイルにある場合、あなたのロガーの名前は「MyApp.tasks」になり、設定でロガー「MyApp.tasks」を作成する必要があります。

__name__の代わりに別の文字列を置くだけで、すべてのタスクが同じロガーにログすることができます。すなわち:「celery.task」

ああ、あなたワーカーログレベルは、あなたはそれが

+1

それはほぼ確実に、ありがとう!すぐに仕事に挑戦します。好奇心のために、なぜメインの「セロリ」ロガーがこれらのタスクログを引き継いでいるのですか? – aravenel

+1

うん、これが動作確認することができます、ありがとう!メイン 'セロリ'ロガーがそれらを選ぶ理由はまだ分かりませんが、私はこれで生きることができます。 – aravenel

関連する問題