1

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 でこれを構成する方法に関するドキュメントが見つかりません。

4

1 に答える 1

0

これを正しく読んだ場合、秘訣は関数を呼び出してredirect_stdouts_to_loggerstdout をSysLogHandlerインスタンスに送信することです。Celery のドキュメントには他にもあります。

于 2015-11-15T01:49:38.760 に答える