是否可以控制Celery任务日志的datefmt?

时间:2019-06-19 18:11:38

标签: python logging celery

对于普通的python记录器,您可以这样配置格式字符串和日期格式:

{                                                                                                     
    'format': '%(asctime)s.%(msecs)d [%(process)d] %(levelname)s [%(name)s] %(message)s',                       
    'datefmt': %d/%m/%Y-%H:%M:%S'                                                                              
}

但是我完全找不到将datefmt传递给Celery任务记录器的任何方法。似乎如此基本的功能让我感到惊讶,如果不可能的话。

我最接近的是遵循this article中介绍的技术。其要旨是使用after_setup_task_logger信号来自定义记录程序处理程序以传递自定义TaskFormatter。但是诀窍在于,尽管让TaskFormatter传递格式字符串,但似乎没有任何规定允许您传递datefmt

this open issue在Celery github上似乎得到了证实。

那么我明显缺少什么吗?无需等待芹菜处理上述问题就可以完成的技巧吗?真的不可能吗?

1 个答案:

答案 0 :(得分:1)

可以在设置任务格式化程序后通过设置datefmt属性来设置datefmt。 Formatter中的__init__就是这样做的。

tf = TaskFormatter('%(asctime)s.%(msecs)d [%(process)d] %(levelname)s [%(name)s] %(message)s')
tf.datefmt = '%d/%m/%Y-%H:%M:%S' 
handler.setFormatter(tf)