Flask と Celery を使用してアプリケーションを構築しており、アプリケーション ログを Papertrail に送信しようとしています。これは、通常の (同期) アプリケーション ログでは問題なく機能します。構成は次のようになります。
import logging
from logging.handlers import SysLogHandler
import socket
class ContextFilter(logging.Filter):
hostname = socket.gethostname()
def filter(self, record):
record.hostname = ContextFilter.hostname
return True
f = ContextFilter()
logger = logging.getLogger()
logger.setLevel(logging.INFO)
logger.addFilter(f)
formatter = logging.Formatter(
"%(asctime)s - %(name)s - %(levelname)s - %(message)s"
)
syslog = SysLogHandler(address=('<myapp>.papertrailapp.com', <port>))
syslog.setFormatter(formatter)
logger.addHandler(syslog)
このロガーを Celery タスクに追加しようとしましたが、表示されるのは sdout に出力され、Papertrail には何も出力されません。Celery は、通常のロギング フローを回避するために何かを行いますか?
Celery にはタスク固有のロガーがあることは認識していますが、Celery でこれを構成する方法に関するドキュメントが見つかりません。