Google 云函数丢失日志问题

Google cloud functions missing logs issue

我有一个小型 python CF 连接到 PubSub 主题,应该使用 sendgrid API 发送一些电子邮件。

CF 可以根据提供的环境变量 (CF_FUNCTION_NAME) 动态加载 & 运行 函数(monorepo 架构):

# main.py
import logging
import os
from importlib import import_module

def get_function(function_name):
    return getattr(import_module(f"functions.{function_name}"), function_name)

def do_nothing(*args):
    return "no function"

cf_function_name = os.getenv("CF_FUNCTION_NAME", False)
disable_logging = os.getenv("CF_DISABLE_LOGGING", False)

def run(*args):
    if not disable_logging and cf_function_name:
        import google.cloud.logging
        client = google.cloud.logging.Client()
        client.get_default_handler()
        client.setup_logging()
        print("Logging enabled")
    cf = get_function(cf_function_name) if cf_function_name else do_nothing
    return cf(*args)

除了与 Stackdriver 日志记录相关的一些问题外,这工作正常:

多次后续执行的stackdriver日志截图: stackdriver screenshot

我在这里遗漏了什么吗? 我的函数动态加载是否以某种方式扰乱了日志记录?

谢谢。

我在这里没有发现任何问题。当您第一次加载函数时,会创建一个实例并启用日志记录(您的日志记录跟踪)。然后,该实例一直存在直到被驱逐(不可预测!)。

如果要查看多个跟踪,请同时执行 2 个调用。 Cloud Function 实例在同一时间只能处理一个请求。 2 个并行调用意味着创建另一个实例,因此,一个新的日志记录初始化。

关于异常,同样的事情。如果您不捕获并打印它,则不会记录任何内容。抓住他们!

Cloud Functions 和 Python 似乎有一个月的问题,其中错误不会自动记录回溯并正确分类为 "Error":GCP Cloud Functions no longer categorizes errors correctly with tracebacks