celery日志不输出的问题处理

问题说明

用Celery也有一阵子了,一直都是很正常的,但是最近做一个新项目时碰到了奇怪的问题,被折腾了一天。

以前的项目里,celery的worker日志我都是直接用module级的logger,也一直没有问题。但这次不知道是不是因为celery的版本问题,worker里的日志死活不显示,但检查数据库里的结果显示任务确定是已经执行了的,在flower里可以看到记录,如果有异常,也可以在flower里看到,但日志文件里就是没有。

放狗搜了半天都是旧的资料,试了好多也不解决问题。

解决方案

最后找到这个帖子《Assistance with Celery Logging》,才解决。

以下以日志输出到stdout为例:

from celery.signals import after_setup_logger

log_format = "xxxx"  # 日志格式

@after_setup_logger.connect
def setup_logger(logger, *args, **kwargs):
    fh = logging.StreamHandler(sys.stdout)
    fh.setLevel(logging.INFO)
    fh.setFormatter(logging.Formatter(log_format))
    logger.addHandler(fh)

这样日志就可以输出到stdout了。

推送到[go4pro.org]