Celery: присоедините пользовательский логгер к стандартному обработчику celery (logfile)
Я хотел бы иметь логгер, который можно использовать как в django, так и в celery.
При использовании django он должен печатать в консоль, а при использовании из задачи celery я бы хотел, чтобы он выводил данные с помощью обработчика celery по умолчанию (в моем случае он сбрасывает данные в файл, указанный аргументом командной строки --logfile).
Это особенно полезно для вспомогательных функций, которые используются как сервером django, так и задачами celery.
Вот что у меня есть в моем settings.py
файле:
LOGLEVEL = os.environ.get("LOGLEVEL", "info").upper()
LOGGING = {
"version": 1, # the dictConfig format version
"disable_existing_loggers": False, # retain the default loggers
"handlers": {
# console logs to stderr
"console": {
"class": "logging.StreamHandler",
"formatter": "verbose",
},
"django.server": DEFAULT_LOGGING["handlers"]["django.server"],
},
"formatters": {
"verbose": {
"format": "[{asctime}]|{levelname}| {message}",
"style": "{",
},
"django.server": {
# "()": "django.utils.log.ServerFormatter",
"format": "[{asctime}]|{levelname}| {message}",
"style": "{",
},
},
"loggers": {
# default for all undefined Python modules
"": {
"level": "WARNING",
"handlers": ["console"],
},
# Our application code
"app": {
"level": LOGLEVEL,
"handlers": ["console"],
# Avoid double logging because of root logger
"propagate": False,
},
# Default runserver request logging
"django.server": DEFAULT_LOGGING["loggers"]["django.server"],
"django.channels.server": DEFAULT_LOGGING["loggers"]["django.server"],
},
}
В моем логгере "app" пока есть только консольный обработчик.
Если я определяю регистратор следующим образом:
logger = get_task_logger("app").getChild(__name__)
Вывод идет в консоль, но не в лог-файл.
Если вместо этого я определяю регистратор следующим образом:
logger = get_task_logger(__name__)
Вывод идет в логфайл, но не в консоль.
Я хотел бы каким-то образом добавить стандартный обработчик celery, который, как мне кажется, создается/настраивается здесь, в мой логгер "app".
Возможно ли это?