ロガー オブジェクトをパラメーターとして関数に渡すことなく、現在のログ設定を変更したいと考えています。現在、各モジュールの上部に 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
と、ログがファイルに送信されません。
コール スタックを調べて、現在セロリ タスクのコンテキストで実行されているかどうかを確認し、実行中の場合はファイルにログを記録するハンドラーを思いつくことを考えています。ただし、ソリューションがパフォーマンスに優れているかどうか、または悪い習慣を実装しているかどうかはわかりません。