我想将芹菜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
我想念什么?
答案 0 :(得分:1)
根据documentation,您只能为将用于构造format
实例的datefmt
项目指定formatters
和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'