如何在YAML配置文件中添加TaskFormatter

时间:2019-04-15 08:33:09

标签: python python-3.x logging 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

我想念什么?

1 个答案:

答案 0 :(得分:1)

根据documentation,您只能为将用于构造format实例的datefmt项目指定formattersFormatter键。看来您无法使用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'