ロギングに関するcelery 3.x ドキュメントでは、タスクロガーを次のように設定することを推奨しています。
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
私がそれを行うと、は無視され、代わりにCELERYD_TASK_LOG_FORMATログステートメントが使用されます。CELERYD_LOG_FORMAT%(task_name)s%(task_id)s
私のタスクはtasks私の app のモジュールにありますmyapp。したがって、__name__ですmyapp.tasks。
問題は次の行にあると思いますcelery/utils/log.py:
def get_task_logger(name):
logger = get_logger(name)
if logger.parent is logging.root:
logger.parent = task_logger
return logger
したがって、何らかの理由で、渡されるモジュールget_task_logger()は第 1 レベルのモジュールでなければなりません。そうでない場合、タスク ロガーはアタッチされません。なぜそうしなければならないのかを説明するコメントはありません (実際にこの制限を追加する理由は思いつきません)。__name__第 2 レベルのモジュールを参照しているため、機能しません。
私は間違いを犯していますか、それともドキュメントが間違っていますか? もしそうなら、get_task_logger()代わりに何に渡せばいいですか?