【发布时间】:2020-05-16 15:20:23
【问题描述】:
我有一个与 PubSub 主题相关的小型 python CF,它应该使用 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”应该在每次调用时打印,但只打印一次?
- 日志中缺少动态加载函数中引发的异常,而日志仅显示“已完成状态崩溃”,这不是很有用。
多个后续执行的堆栈驱动程序日志的屏幕截图: stackdriver screenshot
这里有什么我遗漏的吗? 我的功能动态加载是否会影响日志记录?
谢谢。
【问题讨论】:
标签: google-cloud-platform google-cloud-functions stackdriver