2

Celery タスクの実行中に記録されたすべてのログ メッセージにアクセスしたいと考えています。

ドキュメントから、タスクの ID がログの一部として自動的に報告されるように、すべてのタスクのロガーを作成できます。

from celery.utils.log import get_task_logger

logger = get_task_logger(__name__)

@celery.task
def add(x, y):
    logger.info('Adding %s + %s', x, y)
    return x + y

次のようなログ メッセージが生成されます。

[2013-08-09 10:05:02,381: INFO/MainProcess] project.tasks.add[e56cd982-4c20-2328-af55-9cf4d63623df]: Adding 2 + 2

報告されたタスク ID に基づいて関連するメッセージを抽出することはできましたが、それは非常に非効率的で洗練されていないように思えます。logger

task.ready()さらに、返す前にログメッセージを表示できるようにしたいと思いますTrue(完了前task.stateに与えるのと同じように)。PENDING

3.0 への Celery ログの改善、 Celery ログのドキュメント、およびutils.logソース コードを読みましたが、自分のニーズに合ったものを見つけることができないようです。保留中のタスクのログ メッセージにアクセスすることさえ可能ですか? StringIOタスクの通常の戻り値と一緒にメッセージをキャッチするインスタンスを簡単に返すことができますが、完了前にタスクのログにアクセスすることに興味があります。

任意のヒント?

4

1 に答える 1

0

logging.Filterを返すハンドラーに a を追加しますTrue(ログ イベントが正常に処理されるようにします)。フィルターは、ハンドラーに渡されたすべてのイベントを (ハンドラーのレベルでフィルター処理されない限り)LogRecordインスタンスの形式で表示します。

于 2013-08-09T17:31:40.427 に答える