【问题标题】:Is it possible to control the datefmt of the Celery task logs?是否可以控制 Celery 任务日志的 datefmt?
【发布时间】:2019-06-19 18:11:38
【问题描述】:

使用普通的 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

Celery github 上的this open issue 似乎证实了这一点。

那么我有什么明显的遗漏吗?无需等待芹菜处理上述问题即可完成的技巧?真的不可能吗?

【问题讨论】:

  • 我应该指出,虽然我愿意升级 celery 以解决问题,但我使用的是 4.2.1 版本,并且更喜欢不需要升级的解决方案。

标签: python logging celery


【解决方案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)

【讨论】:

    猜你喜欢
    • 2013-09-30
    • 2014-07-13
    • 2013-02-12
    • 2013-02-20
    • 2020-08-04
    • 2017-06-16
    • 2013-08-26
    • 1970-01-01
    • 2016-12-13
    相关资源
    最近更新 更多