1

ロガー オブジェクトをパラメーターとして関数に渡すことなく、現在のログ設定を変更したいと考えています。現在、各モジュールの上部に LOG オブジェクトを定義しています

LOG = logging.getLogger(__name__)

次のようにロギングを変更したい:

  • ログはファイルに記録されますが、実行コンテキストが Celery タスク内にある場合のみ
  • タスクごとにファイルがあります
  • 各タスクのコードを変更する必要なし

したがって、2 つのタスクがある場合:

@task
def taskOne():
  LOG.log("in task one")
  foo.foo()

@task
def taskTwo():
  LOG.log("in task two")
  foo.foo

そしてモジュールfooで:

def foo():
  LOG.log("in foo")

それで:

  • 実行するtaskOneと、「in task one\nin foo」が「taskOne.log」という名前のファイルに送信されます。
  • 実行するtaskTwoと、「in task two\nin foo」が「taskTwo.log」という名前のファイルに送信されます。
  • セロリ タスクの外部で実行するfooと、ログがファイルに送信されません。

コール スタックを調べて、現在セロリ タスクのコンテキストで実行されているかどうかを確認し、実行中の場合はファイルにログを記録するハンドラーを思いつくことを考えています。ただし、ソリューションがパフォーマンスに優れているかどうか、または悪い習慣を実装しているかどうかはわかりません。

4

0 に答える 0