もっと具体的なログシステムをセットアップする方法を知りたいです。私のすべてのタスクは
logger = logging.getLogger(__name__)
モジュール全体のロガーとして。
セロリが「celeryd.log」にログを記録し、タスクを「tasks.log」に記録したいのですが、これをどのように機能させるかわかりません。 Django-celeryのCELERYD_LOG_FILE
を使用すると、すべてのceleryd関連のログメッセージをceleryd.logにルーティングできますが、タスクで作成されたログメッセージのトレースはありません。
注:この回答はCelery 3.0の時点では時代遅れであり、現在では get_task_logger()
を使用してタスクごとのロガーをセットアップしています。詳細については、 Celery 3.0ドキュメントの新機能のロギングセクション を参照してください。
Celeryは、タスクごとにロギングの専用サポートを提供しています。 テーマに関するタスクドキュメント を参照してください。
ワーカーロガーを使用して、ワーカーログに診断出力を追加できます。
_@celery.task() def add(x, y): logger = add.get_logger() logger.info("Adding %s + %s" % (x, y)) return x + y
_使用可能なログレベルはいくつかあり、ワーカーのログレベル設定は、ログファイルに書き込むかどうかを決定します。
もちろん、標準のout/-errに書き込まれたものはすべてログファイルにも書き込まれるため、単にprintを使用することもできます。
内部では、これはすべて標準のpythonロギングモジュールです。 _CELERYD_Hijack_ROOT_LOGGER
_オプション をFalseに設定して、独自のロギングセットアップを機能させることができます。それ以外の場合、Celeryが処理を構成します。
ただし、タスクの場合、.get_logger()
呼び出しを使用すると、個々のタスクごとに個別のログファイルを設定できます。単にlogfile
引数を渡すと、ログメッセージがその別のファイルにルーティングされます。
_@celery.task()
def add(x, y):
logger = add.get_logger(logfile='tasks.log')
logger.info("Adding %s + %s" % (x, y))
return x + y
_
最後になりましたが、トップレベルパッケージを python logging module で設定し、独自のファイルハンドラーを与えることができます。 _celery.signals.after_setup_task_logger
_信号を使用してこれをセットアップしました。ここでは、すべてのモジュールが_foo.tasks
_(_foo.tasks.email
_および_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)
_
これで、名前が_foo.tasks
_で始まるロガーのすべてのメッセージは、ルートロガーではなく_tasks.log
_に送信されます(_.propagate
_がFalseであるため、これらのメッセージは表示されません)。
ヒント:Celeryには独自のロギングハンドラがあります。
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
また、Celeryはタスクからのすべての出力をログに記録します。詳細は タスクロギングのCeleryドキュメント