2

いくつかの外部ライブラリを利用する 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) を正しく取得できます。

しかし、外部ライブラリはどうですか? 外部スクリプトによって生成されたログを「ラップ」し、要件に従ってフォーマットするエレガントな方法はありますか?

4

0 に答える 0