いくつかの外部ライブラリを利用する Celery タスクを実装しました。
タスクコードが次のようなものだとしましょう:
# mypackage.tasks
import logging
from extpackage1 import module1
from extpackage2 import module2
from celery import Celery
from celery.utils.log import get_task_logger
celery = Celery('tasks', broker='amqp://user:pass@host/vhname')
logger = get_task_logger(__name__)
@celery.task
def my_task(my_job_id):
logger.info('My task executed with my_job_id=%s' % my_job_id)
module1.func1()
module2.func2()
私がインポートする2つのモジュールは基本的に次のとおりです。
# extpackage1.module1
import logging
logger = logging.getLogger(__name__)
def func1():
# let's do something here ...
logger.info('Logging inside module1')
と:
# extpackage2.module2
import logging
logger = logging.getLogger(__name__)
def func2():
# let's do something here ...
logger.info('Logging inside module2')
my_job_id
実行されたタスクに応じて、各行にの正しい値を含むログ ファイルを取得したいと考えています。
次のようなものになります。
[1][...other info..] My task executed with my_job_id=1
[1][...other info..] Logging inside module1
[1][...other info..] Logging inside module2
[2][...other info..] My task executed with my_job_id=2
[2][...other info..] Logging inside module1
[2][...other info..] Logging inside module2
my_job_id
の値をタスク ロガーに簡単に含めることができ、タスク関数内からログに記録した行 ([1][...other info..] My task executed with my_job_id=1
や など[2][...other info..] My task executed with my_job_id=2
) を正しく取得できます。
しかし、外部ライブラリはどうですか? 外部スクリプトによって生成されたログを「ラップ」し、要件に従ってフォーマットするエレガントな方法はありますか?