Невозможно отправить журналы задач 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 с его обработчиками. Но я лично настроил свой собственный регистратор, как вы можете видеть в моем связанном ответе сверху. Я надеюсь, что это может помочь тебе немного...

Другие вопросы по тегам