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 日志记录相关的一些问题外,这工作正常:
- 打印语句 "Logging enabled" 应该在每次调用时打印,但只发生一次?
- 日志中缺少动态加载函数中出现的异常,日志只显示 'finished with status crash',这不是很有用。
多次后续执行的stackdriver日志截图:
stackdriver screenshot
我在这里遗漏了什么吗?
我的函数动态加载是否以某种方式扰乱了日志记录?
谢谢。
我在这里没有发现任何问题。当您第一次加载函数时,会创建一个实例并启用日志记录(您的日志记录跟踪)。然后,该实例一直存在直到被驱逐(不可预测!)。
如果要查看多个跟踪,请同时执行 2 个调用。 Cloud Function 实例在同一时间只能处理一个请求。 2 个并行调用意味着创建另一个实例,因此,一个新的日志记录初始化。
关于异常,同样的事情。如果您不捕获并打印它,则不会记录任何内容。抓住他们!
Cloud Functions 和 Python 似乎有一个月的问题,其中错误不会自动记录回溯并正确分类为 "Error":GCP Cloud Functions no longer categorizes errors correctly with tracebacks
我有一个小型 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 日志记录相关的一些问题外,这工作正常:
- 打印语句 "Logging enabled" 应该在每次调用时打印,但只发生一次?
- 日志中缺少动态加载函数中出现的异常,日志只显示 'finished with status crash',这不是很有用。
多次后续执行的stackdriver日志截图: stackdriver screenshot
我在这里遗漏了什么吗? 我的函数动态加载是否以某种方式扰乱了日志记录?
谢谢。
我在这里没有发现任何问题。当您第一次加载函数时,会创建一个实例并启用日志记录(您的日志记录跟踪)。然后,该实例一直存在直到被驱逐(不可预测!)。
如果要查看多个跟踪,请同时执行 2 个调用。 Cloud Function 实例在同一时间只能处理一个请求。 2 个并行调用意味着创建另一个实例,因此,一个新的日志记录初始化。
关于异常,同样的事情。如果您不捕获并打印它,则不会记录任何内容。抓住他们!
Cloud Functions 和 Python 似乎有一个月的问题,其中错误不会自动记录回溯并正确分类为 "Error":GCP Cloud Functions no longer categorizes errors correctly with tracebacks