Как добавить TaskFormatter в файл конфигурации YAML - PullRequest
0 голосов
/ 15 апреля 2019

Я бы хотел добавить 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'

Mylogger.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 Ответ

1 голос
/ 15 апреля 2019

Согласно документации , вы можете указать только ключи format и datefmt для элемента formatters, которые будут использоваться для создания экземпляра Formatter. Кажется, что вы не можете предоставить пользовательский класс форматера, используя class.

Однако вы можете указать '()' для указания своего пользовательского класса, см. здесь . Соответствующая часть вашей конфигурации станет тогда

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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...