我正在使用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配置它的文档。
答案 0 :(得分:0)
如果我正确阅读this,则秘诀是调用函数redirect_stdouts_to_logger
将stdout发送到SysLogHandler
实例。 Celery's docs有更多。