无法将Celery任务日志推送到Google Cloud(堆栈驱动程序)

时间:2019-01-16 14:37:15

标签: python google-cloud-platform celery google-cloud-stackdriver python-logging

我正在尝试使用他们的Logging API将芹菜任务日志推送到GCP。我正在使用 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处理程序中,即celery.log文件中,但只有工作日志显示在GCP上。 myapp.tasks 日志不会上传到GCP。

我的应用程序当前基于django,但我也已经在香草Python中对其进行了尝试。还是一样的行为。

我遵循了https://www.distributedpython.com/2018/08/28/celery-logging/中描述的方法1,但它也产生了相同的结果。我正在做任何配置小姐吗?

1 个答案:

答案 0 :(得分:0)

几周前,我遇到了类似的问题,但日志记录不全。这是我的答案:How can I log from my python application to splunk, if I use celery as my task scheduler?

我认为问题可能出在您的位置:

logger = get_task_logger(__name__)

这可能会生成settings.py文件中未提及的记录器。也许抓取一个您专门在settings.py文件中设置的记录程序及其处理程序。 但是我个人而言只是建立了自己的记录器,就像您可以从上方的链接答案中看到的那样。我希望这可以对您有所帮助...