首页 > 解决方案 > 有没有办法将 celery app.task 日志发送到 stackdriver?

问题描述

我尝试将默认将 Python 模块记录到 Stackdriver(谷歌云平台)中创建的 celery 任务日志发送,但我遗漏了一些东西。

在当前状态下,所有日志都已推送,但我缺少在任务 Python 文件中创建的日志。

class Logger(object):
    def __init__(self, log_level):
        formatter = CustomJsonFormatter(
            '(timestamp)(level)(name)(created)(process)(msecs)(message)'
        )
        formatter.json_ensure_ascii = False
        logger = logging.getLogger()
        logger.setLevel(log_level)
        client = google.cloud.logging.Client.from_service_account_json(
           'key.json')
        # StreamHandler
        # sh = logging.StreamHandler()
        sh = CloudLoggingHandler(client)
        sh.setLevel(log_level)
        sh.setFormatter(formatter)
        logger.addHandler(sh)


from app.utils.logger import Logger
from celery.signals import setup_logging
@setup_logging.connect
def initialize_logger(*args, **kwargs):
    Logger(log_level=log_level)

标签: pythonlogginggoogle-cloud-platformcelerystackdriver

解决方案


试试这个:

class Logger(object):
    def __init__(self, log_level):
        formatter = CustomJsonFormatter(
            '(timestamp)(level)(name)(created)(process)(msecs)(message)'
        )
        formatter.json_ensure_ascii = False
        logger = logging.getLogger()
        logger.setLevel(log_level)

        client = google.cloud.logging.Client.from_service_account_json(
           'key.json')
        log_handler = client.get_default_handler()
        cloud_logger = logging.getLogger("cloudLogger")
        cloud_logger.setLevel(log_level)
        cloud_logger.setFormatter(formatter)
        cloud_logger.addHandler(log_handler)

推荐阅读