Невозможно отправить журналы задач Celery в Google Cloud (стековый драйвер)
Я пытаюсь протолкнуть журналы задач сельдерея в GCP, используя их Logging API. Я использую google.cloud.logging.handlers.CloudLoggingHandler для того же.
Вот как я это делаю:
settings.py
from google.cloud import logging as gcp_logging
gcp_client = gcp_logging.Client()
gcp_client.setup_logging()
LOGGING_FOLDER = ''
LOG_NAME = 'custom-logs'
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s'
}
},
'handlers': {
'gcp_log': {
'level': 'DEBUG',
'class': 'google.cloud.logging.handlers.CloudLoggingHandler',
'client': gcp_client,
'name': LOG_NAME,
'formatter': 'standard',
},
'celery': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOGGING_FOLDER, 'celery.log'),
'maxBytes': 1024 * 1024 * 100, # 100 MB
'backupCount': 15,
'formatter': 'standard',
}
},
'loggers': {
'myapp.tasks':{
'handlers': ['celery', 'gcp_log'],
'level': 'DEBUG',
'propagate': True
},
'celery.worker':{
'handlers': ['celery', 'gcp_log'],
'level': 'DEBUG',
'propagate': False
},
},
}
MyApp / tasks.py
from celery.utils.log import get_task_logger
logger = get_task_logger(__name__)
@task
def add(x, y):
print("Add - I am from Print ")
logger.info("Add - I am from logger")
return x + y
Все журналы отображаются в обработчике сельдерея, т.е. в файле celery.log, но в GCP отображаются только рабочие журналы. Логи myapp.tasks не загружаются в GCP.
Мое приложение в настоящее время основано на django, но я также попробовал его на ванильном Python. Все то же поведение.
Я следовал методу 1, описанному в https://www.distributedpython.com/2018/08/28/celery-logging/ но он также дал те же результаты. Я что-то пропускаю?
1 ответ
Я столкнулся с подобной проблемой несколько недель назад, но с входом в систему. Вот мой ответ: Как я могу войти из своего приложения на python в spunk, если я использую celery в качестве планировщика задач?
Я думаю, что проблема может быть там, где вы поставили:
logger = get_task_logger(__name__)
Это может привести к созданию журнала, который не упоминается в файле settings.py. Может быть, взять регистратор, который вы специально настроили в своем файле settings.py с его обработчиками. Но я лично настроил свой собственный регистратор, как вы можете видеть в моем связанном ответе сверху. Я надеюсь, что это может помочь тебе немного...