是否可以控制 Celery 任务日志的 datefmt?
Is it possible to control the datefmt of the Celery task logs?
对于普通的 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 上证实了。
那么我是否遗漏了什么明显的东西?无需等待芹菜处理上述问题就可以完成的技巧?真的不可能吗?
可以在通过设置 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)
对于普通的 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 上证实了。
那么我是否遗漏了什么明显的东西?无需等待芹菜处理上述问题就可以完成的技巧?真的不可能吗?
可以在通过设置 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)