【问题标题】:How to add TaskFormatter in YAML config file如何在 YAML 配置文件中添加 TaskFormatter
【发布时间】:2019-04-15 08:33:08
【问题描述】:

我想将 celery TaskFormatter 添加到我的登录处理程序中。 当我在下面的代码中配置它时它确实有效:

from celery.app.log import TaskFormatter

LOGGER = logging.getLogger()
sh = logging.StreamHandler()
sh.setFormatter(TaskFormatter('%(asctime)s - %(task_id)s - %(task_name)s - %(name)s - %(levelname)s - %(message)s'))
LOGGER.setLevel(logging.INFO)
LOGGER.addHandler(sh)

但是当我尝试在 yaml 文件中配置它时(我使用 pyyaml) 我得到了:

ValueError: Unable to configure formatter 'celery_formatter'

我的 logger.yaml

version: 1

formatters:
  celery_formatter:
    class: 'celery.app.log.TaskFormatter'
    format: '%(asctime)s - %(task_id)s - %(task_name)s - %(name)s - %(levelname)s - %(message)s'
    datefmt: '%Y-%m-%d %H:%M'

handlers:
  stdout_handler:
    class: logging.StreamHandler
    level: INFO
    formatter: celery_formatter
    stream: ext://sys.stdout

loggers:
  app_logger:
    level: DEBUG
    handlers: [file, stdout_handler, stderr_handler]
propagate: no

我错过了什么?

【问题讨论】:

    标签: python python-3.x logging celery


    【解决方案1】:

    根据documentation,您只能为formatters 项指定formatdatefmt 键,这些键将用于构造Formatter 实例。您似乎无法使用class 提供自定义格式化程序类。

    但是,您可以提供 '()' 来提供您的自定义类,请参阅 here。您配置的相关部分将变为

    formatters:
      celery_formatter:
        (): celery.app.log.TaskFormatter
        format: '%(asctime)s - %(task_id)s - %(task_name)s - %(name)s - %(levelname)s - %(message)s'
        datefmt: '%Y-%m-%d %H:%M'
    

    【讨论】:

      猜你喜欢
      • 2020-09-30
      • 2020-02-02
      • 2016-01-08
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 2020-05-07
      • 2014-05-23
      相关资源
      最近更新 更多