【问题标题】:how to output python celery standard log to both console and logfile如何将python celery标准日志输出到控制台和日志文件
【发布时间】:2021-07-03 13:56:54
【问题描述】:

我有一个关于如何将 默认格式 输出的 celery 日志发送到控制台(stdout)和日志文件的问题。

log default format: "[%(asctime)s: %(levelname)s/%(processName)s] %(message)s"
task log default format: "[%(asctime)s: %(levelname)s/%(processName)s] 
                          [%(task_name)s(%(task_id)s)] %(message)s"

我使用以下方式启动 celery 应用程序:

celery_app = Clerey()
celery_app.start(argv=["celery", "worker", "-l", "info"]

这只会将完整的 celery 日志发送到控制台(标准输出)。

当我这样做时:

celery_app = Clerey()
celery_app.start(argv=["celery", "worker", "-l", "info", "--logfile='./tasks.log'"]

这只会将完整的 celery 日志发送到日志文件 (tasks.log)。

如何将完整的 celery 日志同时发送到控制台和日志文件?

我尝试使用 logging.config.dictConfig(config) 来设置 streamHandler 和 fileHandler 以输出到控制台和日志文件。这种方式不允许我在默认的 celery 日志格式中包含 task_id 和 task_name,因为 task_id 和 task_name 需要使用 TaskFormatter 类。

【问题讨论】:

    标签: python-3.x celery celery-task


    【解决方案1】:

    执行此操作的标准方法是挂接到celery.signals.setup_loggingcelery.signals.after_setup_task_logger。您可以在信号回调函数中添加额外的日志记录处理程序。顺便说一句,即使您使用dictConfig,您仍然可以将TaskFormatter 添加到您的日志记录配置中。

    【讨论】:

    • 感谢您的信息。你有一个如何将 TaskFormatter 包含到 dictConfig 设置中的示例吗?
    猜你喜欢
    • 1970-01-01
    • 2017-04-13
    • 2013-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    相关资源
    最近更新 更多